001/*
002 * Copyright (c) 2009 The openGion Project.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013 * either express or implied. See the License for the specific language
014 * governing permissions and limitations under the License.
015 */
016package org.opengion.hayabusa.taglib;
017
018import static org.opengion.fukurou.util.StringUtil.*;
019
020import java.io.IOException;
021import java.io.ObjectInputStream;
022import java.io.ObjectOutputStream;
023import java.util.ArrayList;
024import java.util.List;
025import java.util.Locale;
026import java.util.Map;
027
028import org.opengion.fukurou.util.StringUtil;
029import org.opengion.fukurou.util.XHTMLTag;
030import org.opengion.hayabusa.common.HybsSystem;
031import org.opengion.hayabusa.common.HybsSystemException;
032import org.opengion.hayabusa.db.DBColumn;
033import org.opengion.hayabusa.db.DBColumnConfig;
034import org.opengion.hayabusa.db.DBEditConfig;
035import org.opengion.hayabusa.db.DBLastSql;
036import org.opengion.hayabusa.db.DBTableModel;
037import org.opengion.hayabusa.db.DBTableModelSorter;
038import org.opengion.hayabusa.html.FormatterType;
039import org.opengion.hayabusa.html.TableFormatter;
040import org.opengion.hayabusa.html.ViewCrossTableParam;
041import org.opengion.hayabusa.html.ViewForm;
042import org.opengion.hayabusa.html.ViewFormFactory;
043import org.opengion.hayabusa.html.ViewMarker;
044import org.opengion.hayabusa.resource.GUIInfo;
045import org.opengion.hayabusa.resource.RoleMode;
046import org.opengion.hayabusa.resource.UserInfo;
047
048/**
049 * データベースの検索結果を表示するタグです。
050 *
051 * 検索結果は、DBTableModel にセットされます。
052 * このタグに、データ(DBTableModel)と、
053 * コントローラ(ViewForm)を与えて、 外部からコントロールすることで、テキストフィールドやテーブルの形で表示したり、
054 * 入力可/不可、表示可/不可の設定を行うことができます。
055 *
056 * @og.formSample
057 * ●形式:<og:view />
058 *     <og:view
059 *         viewFormType = "HTMLTable"
060 *         command      = "{@command}"
061 *         startNo      = "0"
062 *         pageSize     = "20"
063 *         language     = "ja" />
064 *
065 *     viewFormType : ViewFormオブジェクトを作成する時のキー(オプション)     ViewFormFactory参照
066 *     command      : 処理コマンド( PREV,NEXT,FIRST,LAST,VIEW )(オプション)
067 *     startNo      : データの書き始めの初期値を指定(オプション)
068 *     pageSize     : データのページ数(画面表示件数)を指定(オプション)
069 *     language     : ロケール(オプション)
070 *
071 * ●body:あり(EVAL_BODY_BUFFERED:BODYを評価し、{@XXXX} を解析します)
072 *
073 * ●Tag定義:
074 *   <og:view
075 *       viewFormType       【TAG】ViewForm オブジェクトを作成するクラス({@og.doc03Link viewFormType ViewForm_**** クラス})を指定します
076 *       command            【TAG】コマンド(PREV,NEXT,FIRST,LAST,NEW,RENEW,VIEW,REVIEW,RESET)をセットします
077 *       scope              【TAG】キャッシュする場合のスコープ[request/page/session/applicaton]を指定します(初期値:session)
078 *       startNo            【TAG】表示データを作成する場合の表示の開始行番号をセットします
079 *       pageSize           【TAG】表示データを作成する場合の1ページの行数をセットします
080 *       pagePlus           【TAG】1ページの行数の増加分をセットします(初期値:0)
081 *       writable           【TAG】行が書き込み可能かどうか[true/false]を設定します (初期値:DBTableModel#DEFAULT_WRITABLE[=true])
082 *       checked            【TAG】行のチェックボックスの初期値を設定するかどうか[true/false]を指定します(初期値:null)
083 *       rowspan            【TAG】表示データを作成する場合のフォーマットの行数をセットします(初期値:2)
084 *       skip               【TAG】NEXT等で、選択行以外をスキップするのかどうか[true/false]を指定します (初期値:ViewForm#DEFAULT_SKIP[=false])
085 *       columnWritable     【TAG】書き込み可能カラム名を、カンマ区切りで与えます
086 *       noWritable         【TAG】書き込み不可カラム名を、カンマ区切りで与えます
087 *       columnDisplay      【TAG】表示可能カラム名を、カンマ区切りで与えます
088 *       clmSeqDisplay      【TAG】表示可能カラム名を、カラム順に、カンマ区切りで与えます
089 *       noDisplay          【TAG】表示不可カラム名を、カンマ区切りで与えます
090 *       columnGroup        【TAG】同一表示データをまとめる(表示しない)カラム名を、カンマ区切りで与えます
091 *       noGroup            【TAG】同一表示データをまとめないカラム名を、カンマ区切りで与えます
092 *       groupClass         【TAG】同一表示データをまとめる場合の、表示方法を指定します
093 *       tableSorterKeys    【TAG】カラム名リンクソートを表示するカラム名を、カンマ区切りで与えます
094 *       tableId            【TAG】(通常使いません)sessionから所得する DBTableModelオブジェクトの ID
095 *       viewFormId         【TAG】(通常使いません)sessionから取得する ViewForm オブジェクトの ID
096 *       viewLinkId         【TAG】(通常つかいません)requestから取得する ViewLink に対応する Attributes オブジェクトの ID
097 *       viewMarkerId       【TAG】(通常使いません)requestから取得する ViewMarker に対応する Attributes オブジェクトの ID
098 *       editMarkerId       【TAG】(通常使いません)requestから取得する EditMarker に対応する Attributes オブジェクトの ID
099 *       selectedType       【TAG】表示時の選択用オブジェクトのタイプ[checkbox/radio/hidden]を指定します(初期値:checkbox)
100 *       numberType         【TAG】表示時の行番号の表示方法[sequence/none/delete/skip=カラム名/view=カラム名]を指定します(初期値:sequence)
101 *       optionTypeAttributes        【TAG】テーブル等のチェックボックスに属性を付加します
102 *       noMessage          【TAG】検索結果メッセージを表示しないかどうか[true/false]を設定します(初期値:false[表示する])
103 *       backLinkCount      【TAG】ページの先頭へのリンクの間隔をセットします (初期値:VIEW_BACK_LINK_COUNT[=0])
104 *       headerSkipCount    【TAG】ヘッダーを出力する間隔をセットします(初期値:システムパラメータ の VIEW_HEADER_SKIP_COUNT)
105 *       useCheckControl    【TAG】チェックボックスの全チェックを選択するJavaScript の機能を使用するかどうかを指定します (初期値:VIEW_USE_CHECK_CONTROL[=true])
106 *       useTableSorter     【TAG】ヘッダーにソート用リンクを作成するかどうか[true/false]を指定します (初期値:VIEW_USE_TABLE_SORTER[=true])
107 *       useParam           【TAG】パラメーターファイルの使用をするかどうか[true/false]を指定します(初期値:false)
108 *       useConsistency     【TAG】Consistency キー による整合性チェックを行うかどうか[true/false]を指定します(初期値:true)
109 *       bgColorCycle       【TAG】テーブルのバックグラウンドカラーの入れ替えのサイクルをセットします(初期値は、1:ゼブラ)
110 *       bgColorClsClm      【TAG】テーブルのバックグラウンドカラーのクラスに指定するカラム名を指定します
111 *       useScrollBar       【TAG】スクロールバー用のDIV要素を出力するかどうか[true/false]を指定します (初期値:VIEW_USE_SCROLLBAR[=true])
112 *       loadMarker         【TAG】viewLink や viewMarker の情報取り込みを制御する(初期値は、NEW,RENEW,REVIEW,RESET)
113 *       useSelectedRow     【TAG】SEL_ROW機能[true:有効/false:無効]を指定します (初期値:VIEW_USE_SELECTED_ROW[=true])
114 *       useSelRowColor     【TAG】SEL_ROW使用時の選択行色変更[true:有効/false:無効]を指定します (初期値:VIEW_USE_SELROW_COLOR[=true])
115 *       useHilightRow      【TAG】HILIGHT_ROW機能[true:有効/false:無効]を指定します (初期値:VIEW_USE_HILIGHT_ROW[=true])
116 *       useAfterHtmlTag    【TAG】 処理時間やページサイズなどの情報出力[true:有効/false:無効]を指定します(初期値:true)
117 *       writableControl    【TAG】設定値に "_" が含まれている場合にレンデラーを使用するカラムをCSV形式で指定します
118 *       popupReturnKeys    【TAG】ogPopup で検索結果の値を返すキーを、CSV形式で指定します
119 *       clazz              【TAG】table要素に対して class 属性を設定します(初期値:viewTable)
120 *       language           【TAG】タグ内部で使用する言語コード[ja/en/zh/…]を指定します
121 *       height             【TAG】ビューの高さを指定します
122 *       width              【TAG】ビューの幅を指定します
123 *       fileDwnClms        【TAG】ファイルダウンロード時の抜出カラム名(CSV形式)を指定します
124 *       skipNoEdit         【TAG】編集行のみを表示するかを指定します
125 *       noTransition       【TAG】(通常は使いません)画面遷移を行わない形式の登録方法を使用するかを指定します
126 *       useHilightCheckOnly【TAG】選択行ハイライトの制御をチェックボックスのみで有効にするかを指定します (初期値:VIEW_USE_HILIGHT_CHECK_ONLY[=false])
127 *       useHilightRadioClick【TAG】選択行ハイライトの制御でラジオのクリックイベントを発行するかどうかを指定します (初期値:VIEW_USE_HILIGHT_RADIO_CLICK[=true])
128 *       columnBulkSet      【TAG】一括入力カラムのアシスト機能を利用するカラム名を、カンマ区切りで与えます
129 *       caseKey            【TAG】このタグ自体を利用するかどうかの条件キーを指定します(初期値:null)
130 *       caseVal            【TAG】このタグ自体を利用するかどうかの条件値を指定します(初期値:null)
131 *       caseNN             【TAG】指定の値が、null/ゼロ文字列 でない場合(Not Null=NN)は、このタグは使用されます(初期値:true)
132 *       caseNull           【TAG】指定の値が、null/ゼロ文字列 の場合は、このタグは使用されます(初期値:true)
133 *       mainView           【TAG】(通常は使いません)セッションに情報を登録するかどうか[true/false]指定します。(初期値:true)
134 *       debug              【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false)
135 *   >   ... Body ...
136 *   </og:view>
137 *
138 * ●使用例
139 *       <og:view viewFormId="HTMLTable" command="NEW" startNo="0" pageSize="5" / >
140 *
141 * @og.group 画面表示
142 *
143 * @version  4.0
144 * @author       Kazuhiko Hasegawa
145 * @since    JDK5.0,
146 */
147public class ViewFormTag extends CommonTagSupport {
148        //* このプログラムのVERSION文字列を設定します。   {@value} */
149        private static final String VERSION = "5.7.7.3 (2014/06/27)" ;
150
151        private static final long serialVersionUID = 577320140627L ;
152
153        /** command 引数に渡す事の出来る コマンド  プレビュー {@value}  */
154        public static final String CMD_PREV  = "PREV" ;
155        /** command 引数に渡す事の出来る コマンド  ネクスト {@value}  */
156        public static final String CMD_NEXT  = "NEXT" ;
157        /** command 引数に渡す事の出来る コマンド  ファースト {@value}  */
158        public static final String CMD_FIRST = "FIRST";
159        /** command 引数に渡す事の出来る コマンド  ラスト {@value}  */
160        public static final String CMD_LAST  = "LAST" ;
161        /** command 引数に渡す事の出来る コマンド  新規 {@value}  */
162        public static final String CMD_NEW       = "NEW" ;
163        /** command 引数に渡す事の出来る コマンド  再検索 {@value}  */
164        public static final String CMD_RENEW = "RENEW" ;
165        /** command 引数に渡す事の出来る コマンド  表示 {@value}  */
166        public static final String CMD_VIEW  = "VIEW" ;
167        /** command 引数に渡す事の出来る コマンド  再表示 {@value}  */
168        public static final String CMD_REVIEW  = "REVIEW" ;
169        /** command 引数に渡す事の出来る コマンド  リセット {@value}  */
170        public static final String CMD_RESET  = "RESET" ;
171        /** command 引数に渡す事の出来る コマンド リスト  */
172        private static final String[] COMMAND_LIST = new String[] {
173                        CMD_PREV , CMD_NEXT , CMD_FIRST , CMD_LAST , CMD_NEW , CMD_RENEW , CMD_VIEW , CMD_REVIEW , CMD_RESET };
174
175        // 3.8.0.8 (2005/10/03)
176        /** コマンドリストに存在しない場合の値 従来の CMD_VIEW と区別させるため。 */
177        private static final String CMD_XXX  = "XXX" ;
178
179        private   static final String START_NO_KEY              = "startNo";
180        private   static final String PAGE_SIZE_KEY     = "pageSize";
181        private   static final String PAGE_PLUS_KEY     = "pagePlus";
182
183        // 3.5.6.3 (2004/07/12) スクロールバー用のDIV 要素属性定義
184
185        private String          tableId                 = HybsSystem.TBL_MDL_KEY;
186        private String          viewFormId              = HybsSystem.VIEWFORM_KEY;
187        private String          viewFormType    = null;
188        private String          viewLinkId              = HybsSystem.VIEWLINK_KEY;
189        private String          viewMarkerId    = HybsSystem.VIEW_MARK_KEY;
190        private String          editMarkerId    = HybsSystem.EDIT_MARK_KEY;             // 3.8.6.1 (2006/10/20)
191        private String          command                 = null;
192        private int                     startNo                 = -1;           // HTML画面上の表示開始位置(初期値)
193        private int                     tempStartNo             = -1;           // 再検索時の表示開始位置
194        private int                     pageSize                = -1;           // HTML画面上に表示する件数
195        private int                     pagePlus                = -1;           // 3.5.6.4 (2004/07/16)
196        private transient DBTableModel  table           = null;
197        private transient ViewForm              form            = null;
198        private String          columnWritable  = null;
199        private String          noWritable              = null;
200        private String          columnDisplay   = null;
201        private String          noDisplay               = null;
202        private String          clmSeqDisplay   = null;         // 5.1.6.0 (2010/05/01) ViewForm_HTMLSeqClmTable 対応
203        private String          columnGroup             = null;         // 3.8.5.0 (2006/03/20)
204        private String          noGroup                 = null;         // 5.1.8.0 (2010/07/01)
205        private String          groupClass              = null;         // 5.1.8.0 (2010/07/01)
206        private boolean         noMessage               = false;
207        private String          writable                = null;
208        private String          checked                 = null;
209        private boolean         skip                    = ViewForm.DEFAULT_SKIP;
210        private String          rowspan                 = "2";
211        private String          selectedType    = "checkbox";
212        private String          numberType              = "sequence";           // 3.5.1.0 (2003/10/03) 追加
213        private String          optTypeAttri    =  null;
214        private int                     backLinkCount   = HybsSystem.sysInt( "VIEW_BACK_LINK_COUNT" );
215        private int                     headerSkipCount = HybsSystem.sysInt( "VIEW_HEADER_SKIP_COUNT" );        // 0:通常ヘッダ、n:n回ごとに現れる
216        private List<TableFormatter>              values                  = null;
217        private String          bodyString              = null;
218        private int                     useCheckControl = -1 ;
219        private String          useTableSorter  = null ;        // 3.5.4.7 (2004/02/06)
220
221        private long dyStart = 0;       // 3.5.4.7 (2004/02/06) 実行時間測定用のDIV要素を出力します。
222        private boolean         useParam                = false;        // 3.5.4.8 (2004/02/23) パラメータTagの使用を宣言します。
223        private Map<String,String> viewParam = null;      // 3.5.4.8 (2004/02/23) ViewParamTag のパラメータを受け取ります。
224        private List<String[]> viewArrayList = null; // 5.5.9.0 (2012/12/03) viewObjectから変更
225
226        private transient DBLastSql        lastSql      ;       // 5.8.6.0 (2015/04/03) 6.0.2.4一部移植
227        private transient DBEditConfig editConf ;       // 5.8.6.0 (2015/04/03) 6.0.2.4一部移植
228        private int[]   editMarkerClmNos        ;               // 5.8.6.0 (2015/04/03) 6.0.2.4一部移植
229        private String  editColumnDisplay       = null; // 5.8.6.0 (2015/04/03)
230
231        // 3.5.5.8 (2004/05/20) 整合性チェックを行う為の、Consistency キー を出力するかどうかを指定します。
232        private boolean         useConsistency  = HybsSystem.sysBool( "USE_CONSISTENCY" ) ;
233
234        // 3.5.6.2 (2004/07/05) ゼブラ模様の指定を、ViewForm としてサポート
235        // 0(ゼブラなし)、-1(ワーニング)、-2以下(エラー)、1(ゼブラ)、2以上(行数まとめ)
236        private int bgColorCycle = 1 ;
237
238        // 5.1.8.0 (2010/07/01) 行に対して、動的にクラス属性を付与するカラム名を指定します。
239        private String bgColorClsClm = null;
240
241        private String          useScrollBar    = null ;
242
243        // 3.6.0.0 (2004/09/17) カラムソートリンクを出すカラム名を指定。
244        private String          sortKeys        = null;
245
246        // 3.6.0.4 (2004/10/14) viewLink や viewMarker の情報取り込みを制御
247        // 前後の , が重要です!
248        private String          loadMarker      = ",NEW,RENEW,REVIEW,RESET,";
249
250        // 3.7.1.1 (2005/05/23) SEL_ROW機能の有効/無効を指定します。
251        private String          useSelectedRow  = null ;
252
253        // 3.7.1.1 (2005/05/31) SEL_ROW機能使用時に、BG_COLOR_ROWSEL の使用 有/無を指定します。
254        private String          useSelRowColor  = null;
255
256        // 3.7.1.1 (2005/05/23) 処理時間やページサイズなどの情報出力の有効/無効を指定します。
257        private boolean         useAfterHtmlTag = true ;
258
259        // 3.8.0.9 (2005/10/17) 設定値に "_" が含まれている場合に、レンデラーを使用します。
260        private String          writableControl = null;
261
262        // 3.8.6.0 (2006/09/29) HILIGHT_ROW機能の有効/無効を指定します。
263        private String          useHilightRow   = null;
264
265        // 3.8.6.1 (2006/10/20) ogPopup で検索結果の値を返すキーを、CSV形式で指定します。
266        private String          popupReturnKeys = null ;
267
268        // 4.0.0 (2007/04/16) tableタグを出力するときに付与します。
269        private String          clazz                   = "viewTable";
270
271        // 4.2.0.0 (2008/03/18) ビューの幅と高さを指定できるようにします。
272        private String          height                  = null;
273        private String          width                   = null;
274
275        // 4.3.0.0 (2008/07/04) fileUD ファイルダウンロード時の抜出カラム名(CSV形式)
276        private String          fileDwnClms             = null ;
277
278        // 4.3.1.0 (2008/09/08)
279        private boolean         skipNoEdit              = false;
280
281        // 4.3.3.0 (2008/10/01)
282        private boolean         noTransition    = false;
283
284        // 4.3.7.0 (2009/06/01) HILIGHT_ROW機能有効時に制御を行チェックボックスのみにします。
285        private String          useHilightCheckOnly     = null;
286
287        // 5.9.32.0 (2018/05/02) hilightRow で、行選択時にイベント発行可否を指定できるようにする。 ver6から取り込み
288        private String  isHiRadioClick;
289
290        // 5.2.1.0 (2010/10/01) 一括入力カラムのアシスト機能を利用するカラムを指定します。
291        private String          columnBulkSet   = null;
292        private boolean         useDefBulkset   = HybsSystem.sysBool( "VIEW_USE_DEFAULT_BULKSET" ) ;
293
294        // 5.7.6.1 (2014/05/09) startNoのセッション保存を指定します。
295        private boolean         isMainView              = true;
296
297        // 5.7.7.3 (2014/06/27) MSG0085 Edit機能で指定しているカラム({0})が検索結果に存在しません。削除後、再作成して下さい。
298        private   String        editWarnwMsg    = "MSG0085";
299
300        // 5.5.9.0 (2016/06/03) 6.4.6.1同様の対応。
301        private String  viewClass       ;                               // 今は、外部からの登録は行わない。
302
303        /**
304         * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。
305         *
306         * @og.rev 3.5.4.7 (2004/02/06) DBTableModelのソート機能 useTableSorter を追加
307         * @og.rev 3.5.4.7 (2004/02/06) 実行時間測定用に、開始時刻を取得します。
308         * @og.rev 3.5.4.8 (2004/02/23) useParam を、BODY部の処理判定に加えます。
309         * @og.rev 3.5.6.0 (2004/06/18) DBRowHeader のパッケージプライベート化に伴なう変更
310         * @og.rev 3.5.6.1 (2004/06/25) viewFormType変更時のviewForm 再セット
311         * @og.rev 3.5.6.2 (2004/07/05) command="VIEW" などで、ありえないとしていた処理を追加
312         * @og.rev 3.5.6.3 (2004/07/12) markerSet で table の整合性もチェックする。
313         * @og.rev 3.5.6.4 (2004/07/16) DBTableModelのソート時には、viewを初期設定する。
314         * @og.rev 3.6.0.0 (2004/09/17) scope が request の場合(検索)ヘッダーソートリンクは使えない。
315         * @og.rev 3.6.0.0 (2004/09/22) pageSize の form への設定見直し。
316         * @og.rev 3.6.0.0 (2004/09/25) viewLink , viewMarker のリクエストメモリ削除の中止
317         * @og.rev 3.6.0.4 (2004/10/14) viewLink や viewMarker の情報取り込みを制御する loadMarker を追加
318         * @og.rev 3.6.0.5 (2004/10/18) viewLink , viewMarker のリクエストメモリ削除を復活します。
319         * @og.rev 3.8.0.8 (2005/10/03) ヘッダーソート時に、startNo を 0 に戻します。
320         * @og.rev 3.8.8.5 (2007/03/09) markerSet する条件を強化する。
321         * @og.rev 3.8.8.9 (2007/05/29) ソート時のviewLink,viewMarker の取り込み
322         * @og.rev 3.8.9.3 (2007/08/28) soryKeysのみを指定した場合に、ソート用のテーブルモデルが作成されないバグを修正。
323         * @og.rev 4.1.0.0(2008/01/11)システムパラメータ(useCheckControl)の読取は doEndTag 関数から doStartTag 関数に移動します。
324         * @og.rev 5.1.6.0 (2010/05/01) ViewForm_HTMLSeqClmTable クラス によるカラム表示順処理を行います。
325         * @og.rev 5.1.6.0 (2010/05/01) 左右分割スクロール画面でヘッダースクロールが2回処理されるバグを修正
326         * @og.rev 5.1.6.0 (2010/05/01) ユーザー毎の画面項目並び替え対応
327         * @og.rev 5.1.7.0 (2010/06/01) ViewFormに画面IDをセットし、セットされた画面IDと同じ場合のみViewFormを復元する。
328         * @og.rev 5.1.7.0 (2010/06/01) DBColumnの{&#064;XXXX}変数対応
329         * @og.rev 5.1.7.0 (2010/06/01) ヘッダーソート後に画面遷移し、戻ってきた際にstartNoがクリアされるバグを修正
330         * @og.rev 5.1.8.0 (2010/07/01) 全チェックを押した状態で画面遷移した場合にチェック状態を保持する。
331         * @og.rev 5.1.8.0 (2010/07/01) 同時設定不可(columnWritable,noWritable,columnDisplay,noDisplay,columnGroup,noGroup) チェック
332         * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応
333         * @og.rev 5.3.0.0 (2010/12/01) 左右分割スクロール(SplitViewTag)対応
334         * @og.rev 5.3.6.0 (2011/06/01) Edit機能見直し
335         * @og.rev 5.4.1.0 (2011/11/01) 5.1.8.0 (2010/07/01)の全チェック保持機能を廃止
336         * @og.rev 5.8.6.0 (2015/04/03) OrgClmNames対応
337         * @og.rev 5.8.8.0 (2015/06/05) エラーメッセージリソース化
338         * @og.rev 5.9.9.0 (2016/06/03) 6.4.6.1同等対応(利用目的を明確にするため、パラメータ名をviewClassに変更)
339         *
340         * @return      後続処理の指示
341         */
342        @Override
343        public int doStartTag() {
344                // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応
345                if( !useTag() ) { return SKIP_BODY ; }  // Body を評価しない
346
347                //5.9.9.0
348                // SplitViewTag を使う場合は、再設定されるので、初期設定をここで行っておく。
349                viewClass = "VIEW_" + tableId ;
350
351                // 5.3.0.0 (2010/12/01) 左右分割スクロール(SplitViewTag)対応
352                splitViewParamSet();
353
354                // 5.1.8.0 (2010/07/01) 同時設定不可(columnWritable,noWritable,columnDisplay,noDisplay,columnGroup,noGroup) チェック
355                if( columnWritable != null && noWritable != null ) {
356                        String errMsg = "columnWritable と noWritable は同時に指定できません。"
357                                                        + "columnWritable = [" + columnWritable
358                                                        + "] , noWritable = [" + noWritable
359                                                        + "]";
360                        throw new HybsSystemException( errMsg );
361                }
362
363                if( columnDisplay != null && noDisplay != null ) {
364                        String errMsg = "columnDisplay と noDisplay は同時に指定できません。"
365                                                        + "columnDisplay = [" + columnDisplay
366                                                        + "] , noDisplay = [" + noDisplay
367                                                        + "]";
368                        throw new HybsSystemException( errMsg );
369                }
370
371                if( columnGroup != null && noGroup != null ) {
372                        String errMsg = "columnGroup と noGroup は同時に指定できません。"
373                                                        + "columnGroup = [" + columnGroup
374                                                        + "] , noGroup = [" + noGroup
375                                                        + "]";
376                        throw new HybsSystemException( errMsg );
377                }
378
379                dyStart = System.currentTimeMillis();
380                table = (DBTableModel)getObject( tableId );
381                if( table == null ) { return SKIP_BODY ; }
382
383                // 5.1.6.0 (2010/05/01)ViewForm_HTMLSeqClmTable クラス によるカラム表示順処理を行います。
384                // clmSeqDisplay 属性が設定されていると、クラス指定を変更し、columnDisplay に、clmSeqDisplay を
385                // 設定し、noDisplay を、削除(null をセット)します。
386                if( clmSeqDisplay != null ) {
387                        viewFormType    = "HTMLSeqClmTable" ;
388                        columnDisplay   = clmSeqDisplay;
389                        noDisplay               = null;
390                }
391
392                // 5.8.6.0 (2015/04/03)
393                final String guikey = getGUIInfoAttri( "KEY" );
394                lastSql = (DBLastSql)getSessionAttribute( HybsSystem.DB_LAST_SQL_KEY );
395                // ここではtableId,scope,項目名などで厳密にチェックを行います。
396                if( lastSql != null && lastSql.isGuiMatch( guikey ) && lastSql.isTableMatch( tableId, getScope() ) ) {
397                        final String editName = getRequestValue( "editName" );
398                        if( editName != null ) {
399                                editConf = getUser().getEditConfig( guikey, editName );
400                                if( editConf != null ){
401                                        makeEditTable( editConf );
402                                }
403                        }
404                }
405
406//              // 5.1.6.0 (2010/05/01) seqClmTableを使用するかどうかをチェックします
407//              // 5.3.6.0 (2011/06/01) Edit機能見直しによりメソッド名変更
408//              String editName = getRequestValue( "editName" );
409//              if( editName != null ) {
410//                      String guikey = getGUIInfoAttri( "KEY" );
411//                      DBEditConfig config = getUser().getEditConfig( guikey, editName );
412//                      if( config != null ) {
413//                              makeEditTable( config );
414//                      }
415//              }
416
417                // 5.1.7.0 (2010/06/01) DBColumnの{@XXXX}変数対応
418                int clmSize = table.getColumnCount();
419                for( int clmNo=0; clmNo<clmSize; clmNo++ ) {
420                        DBColumn dbColumn = table.getDBColumn( clmNo );
421                        if ( dbColumn.isNeedsParamParse() ){
422                                DBColumnConfig config = dbColumn.getConfig();
423                                config.setRendererParam( getRequestParameter( config.getRendererParam() ) );
424                                config.setEditorParam( getRequestParameter( config.getEditorParam() ) );
425                                DBColumn newColumn = new DBColumn( config );
426                                table.setDBColumn( clmNo, newColumn );
427                        }
428                }
429
430                // 3.8.8.9 (2007/05/29) ソート時の viewLink,viewMarker の取り込み
431                boolean useSorter = false;
432
433                // 3.5.4.7 (2004/02/06) DBTableModelのソート機能 追加
434                // 登録後に同じソート順で再表示させるために、リクエストキャッシュに登録します。
435                // 3.8.9.3 (2007/08/28) soryKeysのみを指定した場合に、ソート用のテーブルモデルが作成されないバグを修正。
436                // 5.1.6.0 (2010/05/01) 左右分割スクロール画面でヘッダースクロールが2回処理されるバグを修正
437                if( "session".equals( getScope() )
438                        && ( nval( useTableSorter,sysBool( "VIEW_USE_TABLE_SORTER" ) ) || sortKeys != null )
439                        && !( table.getConsistencyKey().equals( getRequestAttribute( HybsSystem.VIEW_SORT_KEY ) ) ) ) {
440
441                        String clm = getRequestValue( HybsSystem.SORT_COLUMNS );
442                        // 若干トリッキー。初めてクリックされるまで、DBTableModelSorter は作成しない。
443                        if( clm != null && clm.length() > 0 ) {
444                                useSorter = true;       // 3.8.8.9 (2007/05/29)
445                                startQueryTransaction( tableId );               // 3.6.0.8 (2004/11/19)
446                                int clmNo = table.getColumnNo( clm );
447                                boolean sortAscending = nval( getRequestValue( HybsSystem.SORT_ASCENDING ),true );
448                                if( table instanceof DBTableModelSorter ) {
449                                        if( !CMD_RESET.equals( command ) ) {
450                                                ((DBTableModelSorter)table).sortByColumn( clmNo );
451                                        }
452                                        sortAscending = ((DBTableModelSorter)table).isAscending() ;     // ソート方向
453                                }
454                                else {
455                                        DBTableModelSorter temp = new DBTableModelSorter();
456                                        temp.setModel( table );
457                                        temp.sortByColumn( clmNo,sortAscending );
458                                        table = temp;
459                                }
460                                // 3.6.0.8 (2004/11/19) トランザクションチェックを行います。
461                                if( ! commitTableObject( tableId, table ) ) {
462//                                      jspPrint( "ViewFormTag Query処理が割り込まれました。DBTableModel は登録しません。" );
463                                        jspPrint( "ViewFormTag " + getResource().getLabel( "ERR0041" ) ); // 5.8.8.0 (2015/06/05)
464                                        return SKIP_PAGE;
465                                }
466                                if( CMD_VIEW.equals( command ) ) {
467                                        setRequestCacheData( HybsSystem.SORT_COLUMNS,clm );
468                                        setRequestCacheData( HybsSystem.SORT_ASCENDING,String.valueOf( sortAscending ) );
469                                }
470
471                                // 5.1.6.0 (2010/05/01)
472                                setRequestAttribute( HybsSystem.VIEW_SORT_KEY, table.getConsistencyKey() );
473
474                                // 3.8.0.8 (2005/10/03) ヘッダーソート時に、startNo を 0 に戻します。
475                                // 5.1.7.0 (2010/06/01) ヘッダーソート後に画面遷移し、戻ってきた際にstartNoがクリアされるバグを修正
476                                if( !CMD_RENEW.equals( command ) ) {
477                                        startNo = 0;
478                                        tempStartNo = startNo;
479                                }
480                        }
481                }
482
483                if( CMD_NEW.equals( command ) || CMD_RENEW.equals( command ) || CMD_REVIEW.equals( command ) || CMD_RESET.equals( command ) ) {
484                        form = ViewFormFactory.newInstance( viewFormType );             // 3.5.6.1 (2004/06/25)
485                        form.init( table );
486                        table.setDefaultRowWritable( DBTableModel.DEFAULT_WRITABLE );
487                        table.setDefaultRowChecked(  DBTableModel.DEFAULT_CHECKED );
488                }
489                else {
490                        // 3.5.6.1 (2004/06/25) viewFormType変更時のviewForm 再セット
491                        ViewForm oldForm = (ViewForm)getObject( viewFormId );
492                        // 5.1.7.0 (2010/06/01) ViewFormに画面IDをセットし、セットされた画面IDと同じ場合のみViewFormを復元する。
493                        if( oldForm != null && getGUIInfoAttri( "KEY" ).equals( oldForm.getGamenId() ) ) {
494                                if( oldForm.getViewFormType().equals( viewFormType ) ) {
495                                        form = oldForm ;
496                                }
497                                else {
498                                        form = ViewFormFactory.newInstance( viewFormType );
499                                }
500                                form.init( table );
501                                // 3.5.6.3 (2004/07/12) markerSet で table の整合性もチェックする。
502                                DBTableModel oldTable = oldForm.getDBTableModel();
503                                if( table.getConsistencyKey().equals( oldTable.getConsistencyKey() ) ) {
504                                        // 3.8.8.5 (2007/03/09) markerSet する条件を強化する。
505                                        // 3.8.8.9 (2007/05/29) ソート時の viewLink,viewMarker の取り込み
506                                        if( "true".equalsIgnoreCase( loadMarker ) ||
507                                                loadMarker.indexOf( "," + command + "," ) >= 0 ||
508                                                useSorter ) {
509                                                        form.markerSet( oldForm );
510                                        }
511                                }
512                        }
513                        else {
514                                // 3.5.6.2 (2004/07/05) command="VIEW" などで、ありえないとしていた処理を追加
515                                form = ViewFormFactory.newInstance( viewFormType );
516                                form.init( table );
517                        }
518                }
519
520                // 5.1.7.0 (2010/06/01) ViewFormに画面IDをセットし、セットされた画面IDと同じ場合のみViewFormを復元する。
521                form.setGamenId( getGUIInfoAttri( "KEY" ) );
522
523                // 3.6.0.4 (2004/10/14) ViewMarker 等のセットは、loadMarker で制御します。
524                if( "true".equalsIgnoreCase( loadMarker ) ||
525                        loadMarker.indexOf( "," + command + "," ) >= 0 ) {
526                        ViewMarker viewLink = (ViewMarker)getRequestAttribute( viewLinkId );
527                        if( viewLink != null ) {
528                                form.setViewLink( viewLink );
529                                removeRequestAttribute( viewLinkId );   // 3.6.0.5 (2004/10/18) 復活
530                        }
531
532                        ViewMarker viewMarker = (ViewMarker)getRequestAttribute( viewMarkerId );
533                        if( viewMarker != null ) {
534                                form.setViewMarker( viewMarker );
535                                removeRequestAttribute( viewMarkerId ); // 3.6.0.5 (2004/10/18) 復活
536                        }
537
538                        // 3.8.6.1 (2006/10/24) editMarker を追加する。
539                        ViewMarker editMarker = (ViewMarker)getRequestAttribute( editMarkerId );
540                        if( editMarker != null ) {
541                                form.setEditMarker( editMarker );
542                                removeRequestAttribute( editMarkerId );
543                                editMarkerClmNos = editMarker.getColumnNos(); // 5.8.6.0 (2015/04/03)
544                        }
545                }
546                // 3.8.0.5 (2005/08/26) false の場合は、無条件に、form のviewLinkとViewMarkerをクリアします。
547                if( "false".equalsIgnoreCase( loadMarker ) ) {
548                        form.setViewLink( null );
549                        form.setViewMarker( null );
550                        form.setEditMarker( null );             // 3.8.6.1 (2006/10/24)
551                }
552                // 4.1.0.0(2008/01/11)システムパラメータ(useCheckControl)の読取は doEndTag 関数から doStartTag 関数に移動します。
553                if( useCheckControl < 0 ) {
554                        useCheckControl = intCase( sys( "VIEW_USE_CHECK_CONTROL" ) ) ;
555                }
556                setTableRowWritable( table );
557
558                setDefaultParameter();
559
560        //      if( pagePlus != 0 ) {   ※ なぜ != だったのか謎。pagePlusがマイナス時は?
561                if( pagePlus > 0 ) {
562                        form.setPageSize( pageSize + pagePlus );
563                }
564                else {
565                        form.setPageSize( pageSize );                           // 3.6.0.0 (2004/09/22) 追加
566                }
567
568                // 3.5.4.8 (2004/02/23)
569                if( form.canUseFormat() || useParam ) { return EVAL_BODY_BUFFERED ; }   // JSP API 1.2
570
571                return SKIP_BODY ;
572        }
573
574        /**
575         * Taglibのタグ本体を処理する doAfterBody() を オーバーライドします。
576         *
577         * @og.rev 3.1.1.0 (2003/03/28) ボディの内容を取得する処理を、CommonTagSupport で行vう。
578         * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。ボディが存在する場合のみボディが呼ばれる対応。
579         * @og.rev 3.5.4.0 (2003/11/25) 外部からフォーマットが指定されない場合は、内部のフォーマットを登録する。
580         * @og.rev 5.1.7.0 (2010/06/01) フォーマットの{&#064;XXXX}の値に[が含まれる場合は、サイニタイズ("\\]\\"に変換)する。
581         *
582         * @return      後続処理の指示(SKIP_BODY)
583         */
584        @Override
585        public int doAfterBody() {
586                bodyString = getSanitizedBodyString();
587                return SKIP_BODY ;
588        }
589
590        /**
591         * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。
592         *
593         * @og.rev 3.0.1.3 (2003/03/11) startNo を隠しフィールドに持つ処理を、追加
594         * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。
595         * @og.rev 3.5.0.0 (2003/03/28) noClass 属性の追加。および、ロジック整理。
596         * @og.rev 3.5.1.0 (2003/10/03) numberType 属性の追加
597         * @og.rev 3.5.2.0 (2003/10/20) headerSkipCount属性を追加
598         * @og.rev 3.5.2.0 (2003/10/20) form が null の場合の条件分岐を追加
599         * @og.rev 3.5.3.1 (2003/10/31) Table系のViewで、skip属性を使用する。
600         * @og.rev 3.5.4.0 (2003/11/25) command="RESET"時に、戻った画面のpageSize がクリアされてしまう対応。
601         * @og.rev 3.5.4.0 (2003/11/25) フォーマット文字列を、TableFormatter オブジェクトを使用するように変更。
602         * @og.rev 3.5.4.1 (2003/12/01) startNo を隠しフィールドに持つ処理を廃止。(キャッシュを使用)
603         * @og.rev 3.5.4.3 (2004/01/05) useCheckControl属性を追加
604         * @og.rev 3.5.4.7 (2004/02/06) DBTableModelのソート機能 useTableSorter を追加
605         * @og.rev 3.5.4.7 (2004/02/06) makeStartNoKeyメソッドの廃止(setRequestCacheDataを利用)
606         * @og.rev 3.5.4.7 (2004/02/06) 実行時間測定用のDIV要素を出力しておきます。
607         * @og.rev 3.5.4.8 (2004/02/23) ViewParamTag のパラメータを追加します。
608         * @og.rev 3.5.5.5 (2004/04/23) DBTableModel の整合性パラメータを hidden で出力します。
609         * @og.rev 3.5.5.8 (2004/05/20) makeConsistencyKey メソッドに処理ロジックを移します。
610         * @og.rev 3.5.6.2 (2004/07/05) bgColorCycle 変数の追加。
611         * @og.rev 3.5.6.4 (2004/07/16) スクロールバー用のDIV要素の出力(開始)
612         * @og.rev 3.6.0.0 (2004/09/17) カラムソートリンクを出すカラム名を指定。
613         * @og.rev 3.6.0.0 (2004/09/22) pageSize の hidden 出力は、初期設定値とします。
614         * @og.rev 3.7.0.3 (2005/03/01) 指定の行番号まで画面をスクロールさせる機能を追加。
615         * @og.rev 3.7.1.1 (2005/05/23) 処理時間やページサイズなどの情報出力の有効/無効を指定します。
616         * @og.rev 3.8.0.3 (2005/07/15) ヘッダー固定のスクロールタイプをセットします。
617         * @og.rev 3.8.0.9 (2005/10/17) writableControl 属性を追加します。
618         * @og.rev 3.8.6.0 (2006/09/29) useHilightRow 属性を追加します。
619         * @og.rev 3.8.6.1 (2006/10/20) ポップアップで値を返すカラム文字列(CSV形式)
620         * @og.rev 4.0.0.0 (2007/11/27) ヘッダーカラムのエディター、レンデラー適用対応
621         * @og.rev 4.1.2.0 (2008/03/12) columnWritable,noWritable に、"null" を指定可能とする。
622         * @og.rev 4.2.0.0 (2008/03/18) ビューの高さ、幅の指定を可能にします。
623         * @og.rev 4.2.1.0 (2008/04/11) null チェック方法変更
624         * @og.rev 4.3.0.0 (2008/07/04) ロールモードによる設定
625         * @og.rev 4.3.0.0 (2008/07/04) fileUD 対応。抜き出すカラムを指定します。
626         * @og.rev 4.3.1.0 (2008/09/08) canUseFormatのエラーハンドリングは各サブクラスで行う。editOnly属性対応。
627         * @og.rev 4.3.3.0 (2008/10/01) noTransition 属性を追加します。
628         * @og.rev 4.3.6.0 (2009/04/01) eventColumn対応
629         * @og.rev 4.3.7.0 (2009/06/01) 行ハイライト機能でチェックボックスでのみON/OFFができるオプションを追加
630         * @og.rev 4.3.8.0 (2009/08/01) noTransition値取得メソッド名変更
631         * @og.rev 5.1.3.0 (2010/02/01) noTransitionのコントロールは、requestで行う。
632         * @og.rev 5.1.6.0 (2010/05/01) fileDwnClmsが指定されない場合は、Viewで表示されたカラムをセット
633         * @og.rev 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し
634         * @og.rev 5.1.7.0 (2010/06/01) HilightRow用のDivは必ず出す(画面遷移なし登録(JavaScript)の正規表現でマッチさせるため))
635         * @og.rev 5.1.8.0 (2010/07/01) form.setNoGroup( noGroup ) , form.setGroupClass( groupClass ) 追加
636         * @og.rev 5.1.8.0 (2010/07/01) form.setBgColorClsClm( bgColorClsClm ) 追加
637         * @og.rev 5.1.8.0 (2010/07/01) Divを必ず出すのは、画面遷移なし登録の場合のみとする(CustomData対応)
638         * @og.rev 5.2.1.0 (2010/10/01) 一括入力カラムのアシスト機能を利用するカラムを指定します。(columnBulkSet)
639         * @og.rev 5.2.2.0 (2010/11/01) useHeaderColumn 属性を、ViewCrossTableParam.USE_HEADER_COLUMN をキーに、取得する
640         * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応
641         * @og.rev 5.5.8.3 (2012/11/17) viewObject追加
642         * @og.rev 5.5.9.0 (2012/12/03) viewObjectをviewArrayListに変更
643         * @og.rev 5.7.6.1 (2014/05/09) mainView対応
644         * @og.rev 5.8.6.0 (2015/04/03) OrgClmNames対応
645         * @og.rev 5.9.5.3 (2016/02/25) formにtableIdを渡す
646         * @og.rev 5.9.9.0 (2016/06/03) 6.4.6.1同等対応(利用目的を明確にするため、パラメータ名をviewClassに変更)
647         * @og.rev 5.9.14.1 (2016/11/11) bulkSetをnullと出来るようにする
648         * @og.rev 5.9.15.0 (2016/12/2) 6.2.5.0 Edit機能でも、条件によっては、書き込み許可するので、特殊処理廃止
649         * @og.rev 5.9.32.0 (2018/05/02) isHiRadioClick
650         *
651         * @return      後続処理の指示
652         */
653        @Override
654        public int doEndTag() {
655                debugPrint();           // 4.0.0 (2005/02/28)
656                // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応
657                if( !useTag() ) { return EVAL_PAGE ; }
658
659                // noTransition = isNoTransitionRequest() || noTransition; // 4.3.3.0 (2008/10/01) 追加
660                noTransition = isNoTransitionRequest(); // 5.1.3.0 (2010/02/01)
661                if( form == null ) { return EVAL_PAGE ; }       // 3.5.2.0 (2003/10/20)
662                if( form.canUseFormat() ) {
663                        if( values == null && bodyString != null && !useParam ) {
664                                TableFormatter format = new TableFormatter();
665                                format.setFormatType( FormatterType.TYPE_HEAD );
666                                format.setFormat( bodyString );
667                                format.setRowspan( rowspan );
668                                values = new ArrayList<TableFormatter>();
669                                values.add( format );
670                                form.setFormatterList( values );
671                        }
672                        else if( values != null ) {
673                                form.setFormatterList( values );
674                        }
675                }
676
677                if( table != null ) {
678                        // 4.2.0.0 (2008/03/18) ビューの高さ、幅を指定する。null回避はAbstractViewFormで行う
679                        form.setHeight( height );
680                        form.setWidth( width );
681
682                        form.setColumnWritable( columnWritable );
683                        form.setNoWritable( noWritable );
684                        form.setColumnDisplay( columnDisplay );
685                        form.setNoDisplay( noDisplay );
686                        form.setColumnGroup( columnGroup );                             // 3.8.5.0 (2006/03/20)
687                        form.setNoGroup( noGroup );                                             // 5.1.8.0 (2010/07/01) 追加
688                        form.setGroupClass( groupClass );                               // 5.1.8.0 (2010/07/01) 追加
689                        form.setTableSorterKeys( sortKeys );                    // 3.6.0.0 (2004/09/17) 追加
690                        form.setNoMessage( noMessage );
691                        form.setSelectedType( selectedType );
692                        form.setUseCheckControl( useCheckControl );             // 3.5.4.3 (2004/01/05) 追加
693                        form.setNumberType( numberType );                               // 3.5.1.0 (2003/10/03) 追加
694                        form.setOptionTypeAttributes( optTypeAttri );
695                        form.setBackLinkCount( backLinkCount );
696                        form.setHeaderSkipCount( headerSkipCount );             // 3.5.2.0 (2003/10/20) 追加
697                        if( useParam ) {
698                                form.setParam( viewParam );     // 3.5.4.8 (2004/02/23)
699                                form.setViewArrayList( viewArrayList ); // 5.5.9.0 (2012/12/03)
700                        }
701                        form.setBgColorCycle( bgColorCycle );                   // 3.5.6.2 (2004/07/05) 追加
702                        form.setBgColorClsClm( bgColorClsClm );                 // 5.1.8.0 (2010/07/01) 追加
703                        form.setWritableControl( writableControl );             // 3.8.0.9 (2005/10/17) 追加
704
705                        // 5.2.1.0 (2010/10/01) 初期バルクセットが true で、かつ、変数が未設定の場合は、全カラム(*)選択とする。
706                        if( useDefBulkset && columnBulkSet == null ) { columnBulkSet = "*"; }
707                        // selectedType が radio の場合は、カラムの設定を行わない。
708                        // 5.9.14.1 (2016/11/11) bulkSetをnullに設定出来るようにする。
709                        //if( "radio".equalsIgnoreCase( selectedType ) ) { columnBulkSet = null; }
710                        if( "radio".equalsIgnoreCase( selectedType ) || "null".equalsIgnoreCase( columnBulkSet ) ) { columnBulkSet = null; } //
711                        form.setColumnBulkSet( columnBulkSet );                 // 5.2.1.0 (2010/10/01) 追加
712
713                        // 5.8.6.0 (2015/04/03)
714                        // editConf が null でないという事は、lastSql の条件がクリアされている。
715                        if( editConf != null ) {
716                                // 5.9.15.0 (2016/12/2) 6.2.5.0Edit機能でも、条件によっては、書き込み許可するので、特殊処理廃止
717//                              if( editMarkerClmNos != null ) {
718//                                      for( int i=0; i<editMarkerClmNos.length; i++ ) {
719//                                              form.setColumnDisplay( editMarkerClmNos[i] , false );   // 表示しない
720//                                      }
721//                              }
722                                final String orgClms = form.getViewClms();              // form.setColumnDisplay(String) の再セット前に取り出す。
723                                lastSql.setOrgClmNames( orgClms );
724                                if( editColumnDisplay != null){
725                                        form.setColumnDisplay( editColumnDisplay );
726                                        form.setNoDisplay( null );
727                                }
728                        }
729
730
731                        // 3.6.0.0 (2004/09/22) pageSize の hidden 出力は、初期設定値とします。
732                        int oldPageSize = pageSize;
733                        pageSize = form.getPageSize();
734                        commandExec( command );
735
736                        form.setStartNo( startNo );
737                        form.setSkip( skip );                                                   // 3.5.3.1 (2003/10/31)
738                        form.setSkipNoEdit( skipNoEdit );                               // 4.3.1.0 (2008/09/08)
739                        boolean useTblSorter = "session".equals( getScope() ) &&
740                                                nval( useTableSorter,sysBool( "VIEW_USE_TABLE_SORTER" ) );
741                        form.setUseTableSorter( useTblSorter );         // 3.5.4.7 (2004/02/06)
742
743                        // 3.6.0.0 (2004/09/17)
744                        // tableSorter 時のリンクに追加するリクエスト変数のキャッシュMapを追加する。
745                        if( useTblSorter || sortKeys != null ) {
746                                // 4.0.0 (2005/01/31)
747                                String memKey = HybsSystem.REQ_CACHE_KEY + getGUIInfoAttri( "KEY" );
748                                Map<?,?> mem = (Map<?,?>)getSessionAttribute( memKey );             // 4.3.3.6 (2008/11/15) Generics警告対応
749                                form.makeTableSorterQuery( mem );
750                        }
751
752                        // 3.5.6.4 (2004/07/16) スクロールバー用のDIV要素の出力(開始)
753                        // 3.8.0.3 (2005/07/15) ヘッダー固定のスクロールタイプをセットします。
754                        // 4.0.0 (2007/04/10) ヘッダー固定のスクロールタイプは、一つにする。
755        //              String hctype = (String)getRequest().getAttribute( HybsSystem.HEADER_FIX_TYPE );
756                        boolean useScBar = nval( useScrollBar,sysBool( "VIEW_USE_SCROLLBAR" ) );
757        //              form.setUseScrollBar( useScBar,hctype );
758                        form.setUseScrollBar( useScBar );
759
760                        // 3.8.6.1 (2006/10/20) ポップアップで値を返すカラム文字列(CSV形式)
761                        form.setPopupReturnKeys( popupReturnKeys );
762                        form.setTableClass( clazz );            // 4.0.0 (2007/04/16)
763
764                        // 3.7.0.3 (2005/03/01) 指定の行番号まで画面をスクロールさせる機能を追加。{I} は無視する。
765                        String rowval = nval( getRequestValue( "SEL_ROW" ),null ) ;
766
767                        boolean useSelRow = nval( useSelectedRow,sysBool( "VIEW_USE_SELECTED_ROW" ) );
768                        if( useSelRow && rowval != null && !rowval.equalsIgnoreCase( "{I}" ) ) {
769                                boolean useSelRowClr = nval( useSelRowColor,sysBool( "VIEW_USE_SELROW_COLOR" ) ) ;
770                                form.setScrollRowNo( Integer.parseInt( rowval ),useSelRowClr );
771                        }
772
773                        // 4.0.0 (2005/11/30) カラムロールを判定して、アクセス不可の場合は表示させないようにする。
774                        int clmSize = table.getColumnCount();
775                        UserInfo userInfo = getUser();
776                        for( int clmNo=0; clmNo<clmSize; clmNo++ ) {
777                                DBColumn dbColumn = table.getDBColumn( clmNo );
778
779                                // 4.3.6.0 (2009/04/01) セッションに生SQLを登録
780                                // 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し
781                                String evCol = dbColumn.getEventColumn();
782                                if( evCol != null && evCol.length() > 0 ){
783                                        addEventColumn( dbColumn );
784                                }
785
786                                // 4.3.0.0 (2008/07/04) ロールモードによる設定
787                                byte bitMode = userInfo.getAccessBitMode( dbColumn.getRoleMode() );
788                                // アクセス不許可の場合のみ、セットする。
789                                // それ以外は、columnDisplay ,noDisplay 属性が適用されている。
790                                if( !RoleMode.isRead( bitMode ) ) {
791                                        form.setColumnDisplay( clmNo,false );
792                                }
793                                // 書込み不許可の場合のみ、セットする。
794                                // それ以外は、columnWritable ,noWritable 属性が適用されている。
795                                if( !RoleMode.isWrite( bitMode ) ) {
796                                        form.setColumnWritable( clmNo,false );
797                                }
798                        }
799
800                        // 3.8.6.0 (2006/09/29) useHilightRow 属性追加
801                        boolean useHiRow = nval( useHilightRow,sysBool( "VIEW_USE_HILIGHT_ROW" ) );
802                        // 5.1.7.0 (2010/06/01) HilightRow用のDivは必ず出す(画面遷移なし登録(JavaScript)の正規表現でマッチさせるため))
803                        // 5.1.8.0 (2010/07/01) Divを必ず出すのは、画面遷移なし登録の場合のみとする(CustomData対応)
804                        if( useHiRow || noTransition ) {
805                                jspPrint( "<div id=\"divHlr\"" );
806                                if( useHiRow ) {
807                                        // 4.3.7.0 (2009/06/01)
808                                        boolean useHiCkOnly = nval( useHilightCheckOnly,sysBool( "VIEW_USE_HILIGHT_CHECK_ONLY" ) );
809                                        // 5.9.32.0 (2018/05/02) highlightRowで、行選択時にイベント発行可否を指定できるようにする。 ver6から取り込み。
810                                        // jspPrint( " onclick=\"hilightRow( event, " + useHiCkOnly + ");\"" );
811                                        final boolean useRdoClick = nval( isHiRadioClick, sysBool("VIEW_USE_HILIGHT_RADIO_CLICK"));
812                                        jspPrint( " onclick=\"hilightRow( event, " + useHiCkOnly + "," + useRdoClick + ");\"" );
813                                }
814                                jspPrint( ">" );
815                        }
816
817                        // 5.2.2.0 (2010/11/01) useHeaderColumn 属性を、ViewCrossTableParam.USE_HEADER_COLUMN をキーに、取得する
818                        if( viewParam != null &&
819                                        "true".equalsIgnoreCase( viewParam.get( ViewCrossTableParam.USE_HEADER_COLUMN ) ) ) {
820                                form.setResourceManager( getResource() );
821                        }
822
823                        form.setNoTransition( noTransition ); // 4.3.3.0 (2008/10/01) 追加
824
825//                      form.setTableId( tableId ); // 5.9.5.3 (2016/02/26)
826                        form.setViewClass( viewClass ); // 5.9.9.0 (2016/06/03)
827
828                        jspPrint( form.create( startNo,pageSize ) );
829
830                        // 5.1.8.0 (2010/07/01) Divを必ず出すのは、画面遷移なし登録の場合のみとする(CustomData対応)
831                        if( useHiRow || noTransition ) {
832                                jspPrint( "</div>" );
833                        }
834
835                        // 5.7.6.1 (2014/05/09) mainView時のみstartNoを登録する
836                        if( isMainView ){
837                                setRequestCacheData( START_NO_KEY,String.valueOf( tempStartNo ) );      // 3.5.4.7 (2004/02/06)
838                        }
839
840                        // 3.6.0.0 (2004/09/22) pageSize の hidden 出力は、初期設定値とします。
841                        if( useAfterHtmlTag ) { // 3.7.1.1 (2005/05/23)
842                                jspPrint( makePageSize( oldPageSize ) );                // 3.6.0.0 (2004/09/22)
843                        }
844
845                        makeConsistencyKey();           // 3.5.5.8 (2004/05/20)
846
847                        setObject( viewFormId, form );
848
849                        // 3.5.4.8 (2004/02/23) 超特殊処理 DBTableModel を View で置き換えます。
850                        // 5.2.2.0 (2010/11/01) saveTableId 属性を、ViewCrossTableParam.SAVE_SCOPE_KEY をキーに、取得する
851                        if( viewParam != null ) {
852                                String saveTableId = viewParam.get( ViewCrossTableParam.SAVE_TABLEID_KEY );     // 5.2.2.0 (2010/11/01)
853                                if( saveTableId != null ) {
854                                        String saveScope = viewParam.get( ViewCrossTableParam.SAVE_SCOPE_KEY );
855                                        setObject( saveTableId, form.getDBTableModel() , saveScope );
856                                }
857                        }
858
859                        // 5.1.6.0 (2010/05/01) Viewで表示した項目をDBLastSqlにセットします。
860                        if( table.getRowCount() > 0 ) {
861                                setViewClms();
862                        }
863                }
864
865                if( useAfterHtmlTag ) { // 3.7.1.1 (2005/05/23)
866                        // 3.5.4.7 (2004/02/06)
867                        long dyTime = System.currentTimeMillis()-dyStart;
868                        jspPrint( "<div id=\"viewTime\" value=\"" + (dyTime) + "\"></div>" );       // 3.5.6.3 (2004/07/12)
869                }
870
871                return EVAL_PAGE ;
872        }
873
874        /**
875         * タグリブオブジェクトをリリースします。
876         * キャッシュされて再利用されるので、フィールドの初期設定を行います。
877         *
878         * @og.rev 2.0.0.4 (2002/09/27) カスタムタグの release() メソッドを、追加
879         * @og.rev 2.0.0.4 (2002/09/27) カスタムタグの release() メソッドを、追加
880         * @og.rev 3.0.1.3 (2003/03/11) startNo を隠しフィールドに持つ処理を、追加
881         * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。
882         * @og.rev 3.5.2.0 (2003/10/20) headerSkipCount属性を追加
883         * @og.rev 3.5.3.0 (2003/10/27) backLinkCount,headerSkipCount属性の初期値をPropertyファイルから設定
884         * @og.rev 3.5.4.0 (2003/11/25) format 関係の文字列を廃止。TableFormatter クラスを使用する。
885         * @og.rev 3.5.4.3 (2004/01/05) useCheckControl属性を追加
886         * @og.rev 3.5.4.7 (2004/02/06) DBTableModelのソート機能 useTableSorter を追加
887         * @og.rev 3.5.4.7 (2004/02/06) 実行時間測定用に、dyStart を追加します。
888         * @og.rev 3.5.4.8 (2004/02/23) ViewParamTag のパラメータを追加します。
889         * @og.rev 3.5.5.8 (2004/05/20) useConsistency 属性を追加します。
890         * @og.rev 3.5.6.2 (2004/07/05) bgColorCycle 変数の追加。
891         * @og.rev 3.5.6.3 (2004/07/12) useScrollBar 変数の追加。
892         * @og.rev 3.6.0.0 (2004/09/17) sortKeys 変数の追加。カラムソートリンクを出すカラム名を指定。
893         * @og.rev 3.6.0.4 (2004/10/14) loadMarker 変数の追加。
894         * @og.rev 3.7.0.1 (2005/01/31) 全件チェックコントロール変更(useCheckControl)
895         * @og.rev 3.7.1.1 (2005/05/23) SEL_ROW機能の有効/無効を指定します。
896         * @og.rev 3.7.1.1 (2005/05/23) 処理時間やページサイズなどの情報出力の有効/無効を指定します。
897         * @og.rev 3.8.0.9 (2005/10/17) writableControl 属性を追加します。
898         * @og.rev 3.8.6.0 (2006/09/29) useHilightRow 属性を追加します。
899         * @og.rev 3.8.6.1 (2006/10/20) editMarkerId , popupReturnKeys属性を追加します。
900         * @og.rev 4.3.0.0 (2008/07/04) fileUD ファイルダウンロード時の抜出カラム名(CSV形式)
901         * @og.rev 4.3.1.0 (2008/09/08) isSkipNoEdit属性対応
902         * @og.rev 4.3.3.0 (2008/10/01) noTransition 属性を追加します。
903         * @og.rev 4.3.7.0 (2009/06/01) useHilightCheckOnly 属性を追加します。
904         * @og.rev 5.1.6.0 (2010/05/01) clmSeqDisplay 属性を追加します。
905         * @og.rev 5.1.8.0 (2010/07/01) noGroup , noGroup 属性を追加します。
906         * @og.rev 5.1.8.0 (2010/07/01) bgColorClsClm 属性を追加します。
907         * @og.rev 5.2.1.0 (2010/10/01) 一括入力カラムのアシスト機能を利用する、columnBulkSet 属性を追加します。
908         * @og.rev 5.5.9.0 (2012/12/03) viewArrayList追加
909         * @og.rev 5.7.6.1 (2014/05/09) mainView追加
910         * @og.rev 5.8.6.0 (2015/04/03) OrgClmNames対応
911         * @og.rev 5.9.9.0 (2016/06/03) 6.4.6.1同等対応(利用目的を明確にするため、パラメータ名をviewClassに変更)
912         * @og.rev 5.9.32.0 (2018/05/02) isHiRadioClick追加(ver6から取り込み)
913         */
914        @Override
915        protected void release2() {
916                super.release2();
917                tableId                         = HybsSystem.TBL_MDL_KEY;
918                viewFormId                      = HybsSystem.VIEWFORM_KEY;
919                viewFormType            = null;
920                viewLinkId                      = HybsSystem.VIEWLINK_KEY;
921                viewMarkerId            = HybsSystem.VIEW_MARK_KEY;
922                editMarkerId            = HybsSystem.EDIT_MARK_KEY;             // 3.8.6.1 (2006/10/20)
923                command                         = null;
924                startNo                         = -1;           // HTML画面上の表示開始位置(初期値)
925                tempStartNo                     = -1;           // 再検索時の表示開始位置
926                pageSize                        = -1;           // HTML画面上に表示する件数
927                pagePlus                        = -1;           // 3.5.6.4 (2004/07/16)
928                table                           = null;
929                form                            = null;
930                columnWritable          = null;
931                noWritable                      = null;
932                columnDisplay           = null;
933                noDisplay                       = null;
934                clmSeqDisplay           = null;         // 5.1.6.0 (2010/05/01) ViewForm_HTMLSeqClmTable 対応
935                columnGroup                     = null;         // 3.8.5.0 (2006/03/20)
936                noGroup                         = null;         // 5.1.8.0 (2010/07/01)
937                groupClass                      = null;         // 5.1.8.0 (2010/07/01)
938                noMessage                       = false;
939                writable                        = null;
940                checked                         = null;
941                skip                            = ViewForm.DEFAULT_SKIP;
942                rowspan                         = "2";
943                selectedType            = "checkbox";
944                numberType                      = "sequence";
945                optTypeAttri            = null;
946                values                          = null;
947                backLinkCount           = HybsSystem.sysInt( "VIEW_BACK_LINK_COUNT" );
948                headerSkipCount         = HybsSystem.sysInt( "VIEW_HEADER_SKIP_COUNT" );        // 0:通常ヘッダ、n:n回ごとに現れる
949                bodyString                      = null;
950                useCheckControl         = -1 ;
951                useTableSorter          = null ;        // 3.5.4.7 (2004/02/06)
952                dyStart                         = 0;            // 3.5.4.7 (2004/02/06)
953                viewParam                       = null;         // 3.5.4.8 (2004/02/23)
954                useParam                        = false;        // 3.5.4.8 (2004/02/23)
955                useConsistency          = HybsSystem.sysBool( "USE_CONSISTENCY" );              // 3.5.5.8 (2004/05/20)
956                bgColorCycle            = 1 ;           // 3.5.6.2 (2004/07/05)
957                bgColorClsClm           = null;         // 5.1.8.0 (2010/07/01)
958                useScrollBar            = null;
959                sortKeys                        = null;         // 3.6.0.0 (2004/09/17)
960                loadMarker                      = ",NEW,RENEW,REVIEW,RESET,";                                   // 4.0.0.0 (2007/11/26)
961                useSelectedRow          = null;
962                useSelRowColor          = null;
963                useAfterHtmlTag         = true;         // 3.7.1.1 (2005/05/23)
964                writableControl         = null;         // 3.8.0.9 (2005/10/17)
965                useHilightRow           = null;         // 3.8.6.0 (2006/09/29)
966                popupReturnKeys         = null ;        // 3.8.6.1 (2006/10/20)
967                clazz                           = "viewTable";  // 4.0.0 (2007/04/16)
968                height                          = null;         // 4.2.0.0 (2008/03/18)
969                width                           = null;         // 4.2.0.0 (2008/03/18)
970                fileDwnClms                     = null ;        // 4.3.0.0 (2008/07/04)
971                skipNoEdit                      = false;        // 4.3.1.0 (2008/09/08)
972                noTransition            = false;        // 4.3.3.0 (2008/10/01)
973                useHilightCheckOnly     = null;         // 4.3.7.0 (2009/06/01)
974                isHiRadioClick          = null;         // (2018/04/26)
975                columnBulkSet           = null;         // 5.2.1.0 (2010/10/01)
976                useDefBulkset           = HybsSystem.sysBool( "VIEW_USE_DEFAULT_BULKSET" ) ;            // 5.2.1.0 (2010/10/01)
977                viewArrayList           = null;         // 5.5.9.0 (2012/12/03)
978                isMainView                      = true;         // 5.7.6.1 (2014/05/09)
979                lastSql                         = null;         // 5.8.6.0 (2015/04/03)
980                editConf                        = null;         // 5.8.6.0 (2015/04/03)
981                editColumnDisplay       = null;         // 5.8.6.0
982                viewClass                       = null;         // 5.9.9.0
983        }
984
985        /**
986         * 左右分割スクロール(SplitViewTag)が存在すれば、パラメータの初期値設定などを行います。
987         *
988         * @og.rev 5.3.0.0 (2010/12/01) 左右分割スクロール(SplitViewTag)対応
989         * @og.rev 5.5.4.0 (2012/07/02) 2回目のnoDisplayを追記型に変更
990         * @og.rev 5.9.9.0 (2016/06/03) 6.4.6.1同等対応(利用目的を明確にするため、パラメータ名をviewClassに変更)
991         */
992        private void splitViewParamSet() {
993                SplitViewTag splitView = (SplitViewTag)findAncestorWithClass( this,SplitViewTag.class );
994                if( splitView != null ) {
995                        String  fixDisplay  = splitView.getFixDisplay();
996                        boolean isFirstStep = splitView.isFirstStep();
997
998                        if( isFirstStep ) {     // 1回目(左側:固定部)
999                                // Viewタグの左側には、fixDisplay のカラムを columnDisplay に設定する。
1000                                columnDisplay = fixDisplay;
1001                                noDisplay     = null;
1002                                viewClass               = "VIEW_" + tableId + "_X1";                    // 6.4.6.1 (2016/06/03)
1003                        }
1004                        else {                          // 2回目(右側:可変部)
1005                                // Viewタグの右側には、command="VIEW" , noMessage="true" , useSelectedRow="false"
1006                                // numberType="delete" をセットするとともに、fixDisplay のカラムを noDisplay の
1007                                columnDisplay = null;
1008                                if( noDisplay != null && noDisplay.length() > 0 ){
1009                                        noDisplay     += ","+fixDisplay; // 5.5.4.0 (2012/07/02) カンマ区切りで追記する
1010                                }
1011                                else{
1012                                        noDisplay     = fixDisplay;
1013                                }
1014
1015                                command                 = "VIEW";
1016                                numberType              = "delete" ;
1017                                noMessage               = true;
1018                                useSelectedRow  = "false";
1019                                viewClass               = "VIEW_" + tableId +"_X2";                     // 6.4.6.1 (2016/06/03)
1020                        }
1021                }
1022        }
1023
1024        /**
1025         * 【TAG】(通常は使いません)結果のDBTableModelを、sessionに登録するときのキーを指定します
1026         *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])。
1027         *
1028         * @og.tag
1029         * 検索結果より、DBTableModelオブジェクトを作成します。これを、下流のviewタグ等に
1030         * 渡す場合に、通常は、session を利用します。その場合の登録キーです。
1031         * query タグを同時に実行して、結果を求める場合、同一メモリに配置される為、
1032         * この tableId 属性を利用して、メモリ空間を分けます。
1033         *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])。
1034         *
1035         * @param       id sessionに登録する時の ID
1036         */
1037        public void setTableId( final String id ) {
1038                tableId   = nval( getRequestParameter( id ),tableId );  // 3.8.0.9 (2005/10/17)
1039        }
1040
1041        /**
1042         * 【TAG】(通常使いません)sessionから取得する ViewForm オブジェクトの ID。
1043         *
1044         * @og.tag
1045         * 表示処理後に,(内部ポインタを書き換えた)ViewForm オブジェクトを
1046         * 同じキーで、sessionに登録します。
1047         * 初期値は、HybsSystem.VIEWFORM_KEY です。
1048         *
1049         * @og.rev 3.3.1.1 (2003/07/03) {&#064;XXXX} 変数が使用できるように修正。
1050         * @og.rev 3.5.6.4 (2004/07/16) VIEW_ID を付加して、他のid と混同しないようにします。
1051         *
1052         * @param       id ViewForm オブジェクトID
1053         */
1054        public void setViewFormId( final String id ) {
1055                String temp = getRequestParameter( id ) ;
1056                if( temp != null && temp.length() > 0 ) {
1057                        viewFormId = temp + TaglibUtil.VIEW_ID;
1058                }
1059        }
1060
1061        /**
1062         * 【TAG】(通常つかいません)requestから取得する ViewLink に対応する Attributes オブジェクトの ID。
1063         *
1064         * @og.tag
1065         * ViewForm オブジェクトに、ViewLink オブジェクトをこのキーより取得することにより、
1066         * カラムに対して、リンク情報を付加して表示させる。
1067         * 初期値は、HybsSystem.VIEWLINK_KEY です。
1068         *
1069         * @og.rev 3.1.4.0 (2003/04/18) 初期値を考慮して、属性登録を行うように変更。
1070         * @og.rev 3.3.1.1 (2003/07/03) {&#064;XXXX} 変数が使用できるように修正。
1071         * @og.rev 3.5.6.4 (2004/07/16) LINK_ID を付加して、他のid と混同しないようにします。
1072         *
1073         * @param       id ViewLink オブジェクトID
1074         */
1075        public void setViewLinkId( final String id ) {
1076                String temp = getRequestParameter( id ) ;
1077                if( temp != null && temp.length() > 0 ) {
1078                        viewLinkId = temp + TaglibUtil.LINK_ID;
1079                }
1080        }
1081
1082        /**
1083         * 【TAG】(通常使いません)requestから取得する ViewMarker に対応する Attributes オブジェクトの ID。
1084         *
1085         * @og.tag
1086         * ViewForm オブジェクトに、ViewMarker オブジェクトをこのキーより取得することにより、
1087         * カラムに対して、マーカー情報を付加して表示させる。
1088         * 初期値は、HybsSystem.VIEW_MARK_KEY です。
1089         *
1090         * @og.rev 3.1.4.0 (2003/04/18) 新規追加
1091         * @og.rev 3.3.1.1 (2003/07/03) {&#064;XXXX} 変数が使用できるように修正。
1092         * @og.rev 3.5.6.4 (2004/07/16) MARK_ID を付加して、他のid と混同しないようにします。
1093         *
1094         * @param       id ViewMarker オブジェクトID
1095         */
1096        public void setViewMarkerId( final String id ) {
1097                String temp = getRequestParameter( id ) ;
1098                if( temp != null && temp.length() > 0 ) {
1099                        viewMarkerId = temp + TaglibUtil.MARK_ID;
1100                }
1101        }
1102
1103        /**
1104         * 【TAG】(通常使いません)requestから取得する EditMarker に対応する Attributes オブジェクトの ID。
1105         *
1106         * @og.tag
1107         * ViewForm オブジェクトに、EditMarker オブジェクト(実際は、ViewMarker オブジェクト)を
1108         * このキーより取得することにより、カラムに対して、マーカー情報を付加して表示させる。
1109         * 初期値は、HybsSystem.EDIT_MARK_KEY です。
1110         *
1111         * @og.rev 3.8.6.1 (2006/10/20) 新規追加
1112         *
1113         * @param       id EditMarker オブジェクトID(実際は、ViewMarker オブジェクト)
1114         */
1115        public void setEditMarkerId( final String id ) {
1116                String temp = getRequestParameter( id ) ;
1117                if( temp != null && temp.length() > 0 ) {
1118                        editMarkerId = temp + TaglibUtil.MARK_ID;
1119                }
1120        }
1121
1122        /**
1123         * 【TAG】ViewForm オブジェクトを作成するクラス({@og.doc03Link viewFormType ViewForm_**** クラスの ****})を指定します。
1124         *
1125         * @og.tag
1126         * これは、org.opengion.hayabusa.html 以下の ViewForm_**** クラスの **** を
1127         * 与えます。これらは、ViewForm インターフェースを継承したサブクラスです。
1128         * 属性クラス定義の {@link org.opengion.hayabusa.html.ViewForm  ViewForm} を参照願います。
1129         * {@og.doc03Link viewFormType ViewForm_**** クラス}
1130         *
1131         * @param       id ViewForm タイプ
1132         * @see         org.opengion.hayabusa.html.ViewForm  ViewFormのサブクラス
1133         */
1134        public void setViewFormType( final String id ) {
1135                viewFormType = getRequestParameter( id );
1136
1137                if( viewFormType == null || viewFormType.length() == 0 ) {
1138                        String errMsg = "viewForm の id が設定されていません。";
1139                        throw new HybsSystemException( errMsg );
1140                }
1141        }
1142
1143        /**
1144         * 【TAG】コマンド(PREV,NEXT,FIRST,LAST,NEW,RENEW,VIEW,REVIEW,RESET)をセットします。
1145         *
1146         * @og.tag
1147         * コマンドは,HTMLから(get/post)指定されますので,CMD_xxx で設定される
1148         * フィールド定数値のいづれかを、指定できます。
1149         *
1150         * @og.rev 3.8.0.8 (2005/10/03) その他のコマンドを CMD_XXX にします。
1151         *
1152         * @param       cmd コマンド(public static final 宣言されている文字列)
1153         * @see         <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.ViewFormTag.CMD_PREV">コマンド定数</a>
1154         */
1155        public void setCommand( final String cmd ) {
1156                String cmd2 = getRequestParameter( cmd );
1157                if( cmd2 != null && cmd2.length() > 0 ) { command = cmd2.toUpperCase(Locale.JAPAN); }
1158
1159                if( command == null ||
1160                         (command.trim()).length() == 0 ||
1161                        ! check( command, COMMAND_LIST ) ) {
1162                                // 3.8.0.8 (2005/10/03) その他のコマンドを CMD_XXX にします。
1163                                command = CMD_XXX ;
1164                }
1165        }
1166
1167        /**
1168         * 【TAG】表示データを作成する場合の表示の開始行番号をセットします。
1169         *
1170         * @og.tag
1171         * セットされていない場合は,変更しません。
1172         *
1173         * @og.rev 3.0.1.3 (2003/03/11) startNo を隠しフィールドに持つ処理を、追加
1174         *
1175         * @param       no 表示開始行番号(先頭は 0)
1176         */
1177        public void setStartNo( final String no ) {
1178                startNo = nval( getRequestParameter( no ),startNo );
1179                tempStartNo = startNo;
1180        }
1181
1182        /**
1183         * 【TAG】表示データを作成する場合の1ページの行数をセットします。
1184         *
1185         * @og.tag
1186         * セットされていない場合は,変更しません。
1187         *
1188         * @param       sz 1ページの行数
1189         */
1190        public void   setPageSize( final String sz ) {
1191                pageSize = nval( getRequestParameter( sz ),pageSize );
1192        }
1193
1194        /**
1195         * 【TAG】1ページの行数の増加分をセットします(初期値:0)。
1196         *
1197         * @og.tag
1198         * セットされていない場合は,0(増加なし)です。
1199         *
1200         * @param       pp 1ページの行数
1201         */
1202        public void   setPagePlus( final String pp ) {
1203                pagePlus = nval( getRequestParameter( pp ),pagePlus );
1204        }
1205
1206        /**
1207         * 【TAG】ページの先頭へのリンクの間隔をセットします
1208         *              (初期値:VIEW_BACK_LINK_COUNT[={@og.value org.opengion.hayabusa.common.SystemData#VIEW_BACK_LINK_COUNT}])。
1209         *
1210         * @og.tag
1211         * 0 にセットすると、リンクは作成されません。
1212         * テーブルのヘッダー固定ができないケースでは、データ件数が多いと、登録ボタンが見えなくなります。
1213         * その場合、スクロールして上に上がるより、行番号に作成されリンクで、一気に上に戻るほうが早く処理できます。
1214         * その場合、段組み等していると、間隔を少なくしておく必要が出てきます。
1215         * ヘッダー固定を利用する場合は、不要です。
1216         * (初期値:システム定数のVIEW_BACK_LINK_COUNT[={@og.value org.opengion.hayabusa.common.SystemData#VIEW_BACK_LINK_COUNT}])。
1217         *
1218         * @param       blc リンクの間隔
1219         * @see         org.opengion.hayabusa.common.SystemData#VIEW_BACK_LINK_COUNT
1220         */
1221        public void   setBackLinkCount( final String blc ) {
1222                backLinkCount = nval( getRequestParameter( blc ),backLinkCount );
1223        }
1224
1225        /**
1226         * 【TAG】ヘッダーを出力する間隔をセットします
1227         *              (初期値:VIEW_HEADER_SKIP_COUNT[={@og.value org.opengion.hayabusa.common.SystemData#VIEW_HEADER_SKIP_COUNT}])。
1228         *
1229         * @og.tag
1230         * 0を指定すると、繰り返しません(つまり、ヘッダーを最初に表示するだけです。)
1231         * 数字を指定すると、その回数毎に、ヘッダーをデータの行に挿入します。
1232         * (初期値:システム定数のVIEW_HEADER_SKIP_COUNT[={@og.value org.opengion.hayabusa.common.SystemData#VIEW_HEADER_SKIP_COUNT}])。
1233         *
1234         * @og.rev 3.5.2.0 (2003/10/20) 新規作成
1235         *
1236         * @param       hsc ヘッダーの表示間隔 ( 0:通常ヘッダ、n:n回ごとに現れる )
1237         * @see         org.opengion.hayabusa.common.SystemData#VIEW_HEADER_SKIP_COUNT
1238         */
1239        public void   setHeaderSkipCount( final String hsc ) {
1240                headerSkipCount = nval( getRequestParameter( hsc ),headerSkipCount );
1241        }
1242
1243        /**
1244         * 【TAG】書き込み可能カラム名を、カンマ区切りで与えます。
1245         *
1246         * @og.tag
1247         * これは、書き込み不可カラム名の指定(noWritable)と同時にセットする
1248         * ことは出来ません。
1249         * "*" を指定すると、すべてのカラムを(columnWritable)指定したことになります。
1250         *
1251         * @og.rev 3.3.1.1 (2003/07/03) {&#064;XXXX} 変数が使用できるように修正。
1252         * @og.rev 4.1.2.0 (2008/03/12) 引数に、"null" を指定可能とする。
1253         * @og.rev 4.2.1.0 (2008/04/11) null チェック方法変更
1254         * @og.rev 4.2.1.1 (2008/04/30) 引数にA,B,{&#064;XXXX}等が指定された場合に{&#064;XXXX}の変換が行われないバグを修正
1255         * @og.rev 5.1.8.0 (2010/07/01) noWritable 同時セットチェックを、メソッドではなく、本体で行う。
1256         *
1257         * @param       columnName      例:"OYA,KO,HJO,SU,DYSET,DYUPD"
1258         * @see         #setNoWritable( String )
1259         */
1260        public void setColumnWritable( final String columnName ) {
1261                columnWritable = nval( getRequestParameter(columnName),null );
1262                if( "null".equalsIgnoreCase( columnWritable ) ) { columnWritable = ""; }
1263        }
1264
1265        /**
1266         * 【TAG】書き込み不可カラム名を、カンマ区切りで与えます。
1267         *
1268         * @og.tag
1269         * これは、書き込み可能カラム名の指定(columnWritable)と同時にセットする
1270         * ことは出来ません。
1271         * "*" を指定すると、すべてのカラムを(noWritable)指定したことになります。
1272         *
1273         * @og.rev 3.3.1.1 (2003/07/03) {&#064;XXXX} 変数が使用できるように修正。
1274         * @og.rev 4.1.2.0 (2008/03/12) 引数に、"null" を指定可能とする。
1275         * @og.rev 4.2.1.0 (2008/04/11) null チェック方法変更
1276         * @og.rev 4.2.1.1 (2008/04/30) 引数にA,B,{&#064;XXXX}等が指定された場合に{&#064;XXXX}の変換が行われないバグを修正
1277         * @og.rev 5.1.8.0 (2010/07/01) noWritable 同時セットチェックを、メソッドではなく、本体で行う。
1278         *
1279         * @param       columnName      例:"OYA,KO,HJO,SU,DYSET,DYUPD"
1280         * @see         #setColumnWritable( String )
1281         */
1282        public void setNoWritable( final String columnName ) {
1283                noWritable = nval( getRequestParameter(columnName),null );
1284                if( "null".equalsIgnoreCase( noWritable ) ) { noWritable = ""; }
1285        }
1286
1287        /**
1288         * 【TAG】表示可能カラム名を、カンマ区切りで与えます。
1289         *
1290         * @og.tag
1291         * これは、表示不可カラム名の指定(noDisplay)と同時にセットする
1292         * ことは出来ません。
1293         * "*" を指定すると、すべてのカラムを(columnDisplay)指定したことになります。
1294         *
1295         * @og.rev 3.3.1.1 (2003/07/03) {&#064;XXXX} 変数が使用できるように修正。
1296         * @og.rev 5.1.8.0 (2010/07/01) noWritable 同時セットチェックを、メソッドではなく、本体で行う。
1297         *
1298         * @param       columnName      例:"OYA,KO,HJO,SU,DYSET,DYUPD"
1299         * @see         #setNoDisplay( String )
1300         */
1301        public void setColumnDisplay( final String columnName ) {
1302                columnDisplay = nval( getRequestParameter(columnName),null );
1303                if( "null".equalsIgnoreCase( columnDisplay ) ) { columnDisplay = ""; }
1304        }
1305
1306        /**
1307         * 【TAG】表示不可カラム名を、カンマ区切りで与えます。
1308         *
1309         * @og.tag
1310         * これは、表示可能カラム名の指定(columnDisplay)と同時にセットする
1311         * ことは出来ません。
1312         * "*" を指定すると、すべてのカラムを(noDisplay)指定したことになります。
1313         *
1314         * @og.rev 3.3.1.1 (2003/07/03) {&#064;XXXX} 変数が使用できるように修正。
1315         * @og.rev 5.1.8.0 (2010/07/01) noWritable 同時セットチェックを、メソッドではなく、本体で行う。
1316         *
1317         * @param       columnName      例:"OYA,KO,HJO,SU,DYSET,DYUPD"
1318         * @see         #setColumnDisplay( String )
1319         */
1320        public void setNoDisplay( final String columnName ) {
1321                noDisplay = nval( getRequestParameter(columnName),null );
1322                if( "null".equalsIgnoreCase( noDisplay ) ) { noDisplay = ""; }
1323        }
1324
1325        /**
1326         * 【TAG】表示可能カラム名を、カラム順に、カンマ区切りで与えます。
1327         *
1328         * @og.tag
1329         * これは、ViewForm_HTMLSeqClmTable 用に特別に用意された属性です。
1330         * 機能的には、columnDisplay 属性で、カラムの表示順まで指定できる機能を
1331         * 用意すべきですが、過去のタグとの互換性の関係で、別に用意しています。
1332         * (この属性を使用すると、通常の表示より、処理速度が低下します。)
1333         *  例:"OYA,KO,HJO,SU,DYSET,DYUPD" この順番で表示され、指定以外のカラムは表示されません。
1334         *
1335         * @og.rev 5.1.6.0 (2010/05/01) clmSeqDisplay 属性を追加します。
1336         *
1337         * @param       columnName      カラム名
1338         */
1339        public void setClmSeqDisplay( final String columnName ) {
1340                clmSeqDisplay = nval( getRequestParameter(columnName),null );
1341        }
1342
1343        /**
1344         * 【TAG】同一表示データをまとめる(表示しない)カラム名を、カンマ区切りで与えます。
1345         *
1346         * @og.tag
1347         * これは、カラムのグループ化指定を行います。
1348         * 同じカラム番号で一つ上の行番号と同じ内容の場合に、特殊な表示方法で表示します。
1349         * 対応は、表示(Renderer)時のみとします。
1350         * 特殊な表示方法の指定は、groupClass 属性で指定します。
1351         * (例:groupClass にアルファベット以外の文字・・そのまま表示、アルファベットはクラス属性を付与します。)
1352         * カラム単位なので、新しいゼブラによる色分けは行いません。(任意のカラムに適用できる為)
1353         * また、ファイル出力などのデータ自身は変更されていませんので、そのままデータが落ちます。
1354         *
1355         * これは、同一表示データをまとめないカラム名の指定(noGroup)と同時にセットする
1356         * ことは出来ません。
1357         * "*" を指定すると、すべてのカラムを(columnGroup)指定したことになります。
1358         *
1359         * @og.rev 3.8.5.0 (2006/03/20) 新規追加
1360         * @og.rev 5.1.8.0 (2010/07/01) noWritable 同時セットチェックを、メソッドではなく、本体で行う。
1361         *
1362         * @param       group   例:"OYA,KO,HJO,SU,DYSET,DYUPD"
1363         * @see         #setNoGroup( String )
1364         * @see         #setGroupClass( String )
1365         */
1366        public void setColumnGroup( final String group ) {
1367                columnGroup = nval( getRequestParameter( group ),null );
1368                if( "null".equalsIgnoreCase( columnGroup ) ) { columnGroup = ""; }
1369        }
1370
1371        /**
1372         * 【TAG】同一表示データをまとめないカラム名を、カンマ区切りで与えます。
1373         *
1374         * @og.tag
1375         * これは、カラムのグループ化指定で、同一でもまとめないカラムを指定するほうが簡単な場合に
1376         * 使用します。例えば、キー情報以外は、グループ化指定したい場合などに便利です。
1377         * 動作は、columnGroup の動きと同じです。(まとめないカラムを指定するだけです。)
1378
1379         * これは、同一表示データをまとめるカラム名の指定(columnGroup)と同時にセットする
1380         * ことは出来ません。
1381         * "*" を指定すると、すべてのカラムを(noGroup)指定したことになります。
1382         *
1383         * @og.rev 5.1.8.0 (2010/07/01) 新規追加
1384         *
1385         * @param       group   例:"OYA,KO,HJO,SU,DYSET,DYUPD"
1386         * @see         #setColumnGroup( String )
1387         * @see         #setGroupClass( String )
1388         */
1389        public void setNoGroup( final String group ) {
1390                noGroup = nval( getRequestParameter( group ),null );
1391                if( "null".equalsIgnoreCase( noGroup ) ) { noGroup = ""; }
1392        }
1393
1394        /**
1395         * 【TAG】同一表示データをまとめる場合の、表示方法を指定します。
1396         *
1397         * @og.tag
1398         * これは、カラムのグループ化指定(columnGroup)を行う場合の、まとめ表示の方法を指定します。
1399         * なにも指定しない場合は、まとめカラムは、表示しない(ゼロ文字列)になります。
1400         * その場合、先の行と同じ場合も、変更されたカラムが、NULL(ゼロ文字列)であった場合も、
1401         * 同じ用に表示されるため、区別が付きません。
1402         * そこで、前の行と同じデータの場合に、特殊な処理を行うことで、区別できるようにします。
1403         * 指定方法が特殊なので、注意が必要です。
1404         *   記号の場合:
1405         *       記号(-- , → , ↓ , * など)が指定された場合は、そのままの文字に置き換えられます。
1406         *       初期値は、空文字列(ゼロ文字列)です。
1407         *   アルファベットの場合:
1408         *       アルファベット(a-z,A-Z)の場合は、&lt;span class="アルファベット"&gt;元の文字&lt;/span&gt;
1409         * 例えば、バックカラーに色を付ける、文字を薄い灰色にする、などできます。
1410         * ただし、データ量が圧倒的に増えるため、大量のデータ等で使用するのは避けたほうが良いと思います。
1411         *
1412         * @og.rev 3.8.5.0 (2006/03/20) 新規追加
1413         *
1414         * @param       grpCls まとめ表示の方法
1415         */
1416        public void setGroupClass( final String grpCls ) {
1417                groupClass = nval( getRequestParameter(grpCls),null );
1418        }
1419
1420        /**
1421         * 【TAG】カラム名リンクソートを表示するカラム名を、カンマ区切りで与えます。
1422         *
1423         * @og.tag
1424         * ヘッダーにソート用リンクを作成する useTableSorter 属性 に対して、
1425         * カラム個別に作成する場合のカラム名をカンマ区切り文字で指定します。
1426         * この sortKeys 属性は、useTableSorter 属性 と無関係に、指定した
1427         * カラムのみ、リンクを表示します。
1428         * "*" を指定すると、すべてのカラムを(tableSorterKeys)指定したことになります。
1429         * 例:"OYA,KO,HJO,SU,DYSET,DYUPD"
1430         *
1431         * @og.rev 3.6.0.0 (2004/09/17) 新規作成
1432         *
1433         * @param       columnName      カラム名
1434         */
1435        public void setTableSorterKeys( final String columnName ) {
1436                sortKeys = nval( getRequestParameter(columnName),null );
1437        }
1438
1439        /**
1440         * 【TAG】検索結果メッセージを表示しないかどうか[true/false]を設定します(初期値:false[表示する])。
1441         *
1442         * @og.tag
1443         * 初期値は、表示する(true以外)です。
1444         *
1445         * @param       flag 検索結果メッセージの制御 [true:表示しない/それ以外:表示する]
1446         */
1447        public void setNoMessage( final String flag ) {
1448                noMessage = nval( getRequestParameter( flag ),noMessage );
1449        }
1450
1451        /**
1452         * 【TAG】行が書き込み可能かどうか[true/false]を設定します
1453         *              (初期値:DBTableModel#DEFAULT_WRITABLE[={@og.value DBTableModel#DEFAULT_WRITABLE}])。
1454         *
1455         * @og.tag
1456         * 書込み許可する場合は, true、許可しない場合は, true 以外を設定します。
1457         * ここで、false を設定すると全行書込み禁止になります。true を設定した
1458         * 場合、デフォルトで書込み許可が与えられ、先頭カラムが writable であれば、
1459         * その値を取り込んで、行ごとの書込み許可/不許可が決定されます。
1460         * writable,checked,useCheckControl については、writable が最優先で
1461         * 次に、useCheckControl="2"(または、checked)、次に、checked を判定します。
1462         * checked="true"の場合は、useCheckControl が、"1"(true)以上の場合、
1463         * "2"(checked)に設定されます。
1464         * (初期値:DBTableModel#DEFAULT_WRITABLE[={@og.value DBTableModel#DEFAULT_WRITABLE}])。
1465         *
1466         * @param       flag [true:書込み許可/true以外:書込み禁止]
1467         * @see         org.opengion.hayabusa.db.DBTableModel#DEFAULT_WRITABLE
1468         */
1469        public void setWritable( final String flag ) {
1470                writable = getRequestParameter( flag );
1471        }
1472
1473        /**
1474         * テーブルデータに書込み許可/チェック状態を設定します。
1475         *
1476         * @og.rev 3.6.0.0 (2004/09/17) writable が false の場合全件チェック用チェックボックスを出さない。
1477         * @og.rev 3.7.0.1 (2005/01/31) 全件チェックコントロールのロジック変更(useCheckControl)
1478         * @og.rev 3.8.8.5 (2007/03/09) 全件チェック(useCheckControl)と、個別チェック(checked)の整合性
1479         * @og.rev 5.5.5.6 (2012/08/31) ユーザーと画面の関係が、リードオンリーの場合は、writable=falseを内部設定する。
1480         * @og.rev 5.5.6.1 (2012/09/03) writable自動セットは指定コマンドのみ
1481         *
1482         * @param       table   DBTableModelオブジェクト
1483         */
1484        private void setTableRowWritable( final DBTableModel table ) {
1485
1486                // 5.5.5.6 (2012/08/31) リードオンリーの場合は、writable=falseを内部設定する。
1487                // このタグで、writable が指定された場合は、そちらを優先する。(つまり、null の場合は、内部設定する。)
1488                // 5.5.6.1 (2012/09/03) この処理を行うのは指定コマンドのみ
1489                if( ( writable == null || writable.length() == 0 ) && check( command, COMMAND_LIST ) ) {
1490                        GUIInfo guiInfo = (GUIInfo)getSessionAttribute( HybsSystem.GUIINFO_KEY );
1491                        if ( ! guiInfo.isWrite() ){
1492                                writable = "FALSE" ;
1493                        }
1494                }
1495
1496                if( writable != null && writable.length() > 0 ) {
1497                        boolean flag = "TRUE".equalsIgnoreCase( writable );
1498                        table.setDefaultRowWritable( flag );
1499                        if( ! flag ) { useCheckControl = 0; }                   // 3.7.0.1 (2005/01/31)
1500                }
1501
1502                // 全チェックONの場合は、個別チェックもONにする。
1503                if( useCheckControl == 2 ) { checked = "true"; }        // 3.8.8.5 (2007/03/09)
1504
1505                if( checked != null && checked.length() > 0 ) {
1506                        boolean flag = "TRUE".equalsIgnoreCase( checked );
1507                        table.setDefaultRowChecked( flag );
1508                        // 個別チェックONの場合は、全チェックもONにする。
1509                        if( flag && useCheckControl >= 1 ) { useCheckControl = 2; }                  // 3.8.8.5 (2007/03/09)
1510                }
1511        }
1512
1513        /**
1514         * 【TAG】行のチェックボックスの初期値を設定するかどうか[true/false]を指定します(初期値:null)。
1515         *
1516         * @og.tag
1517         * 書き込み可能な行(rowWritable == true)のチェックボックスに対して
1518         * 初期値を 選択済みにするか、非選択済みにするかを指定します。
1519         * writable,checked,useCheckControl については、writable が最優先で
1520         * 次に、useCheckControl="2"(または、checked)、次に、checked を判定します。
1521         * checked="true"の場合は、useCheckControl が、"1"(true)以上の場合、
1522         * "2"(checked)に設定されます。
1523         *
1524         * @param       flag [true:書込み許可/それ以外:書込み禁止]
1525         */
1526        public void setChecked( final String flag ) {
1527                checked = getRequestParameter( flag );
1528        }
1529
1530        /**
1531         * 【TAG】NEXT等で、選択行以外をスキップするのかどうか[true/false]を指定します
1532         *              (初期値:ViewForm#DEFAULT_SKIP[={@og.value ViewForm#DEFAULT_SKIP}])。
1533         *
1534         * @og.tag
1535         * 明細情報の登録/編集時に、必要な個所のみを順番に処理する場合に使用します。
1536         * (初期値:ViewForm#DEFAULT_SKIP[={@og.value ViewForm#DEFAULT_SKIP}])。
1537         *
1538         * @param       flag スキップ  [true:する/それ以外:しない]
1539         * @see         org.opengion.hayabusa.html.ViewForm#DEFAULT_SKIP
1540         */
1541        public void setSkip( final String flag ) {
1542                skip = nval( getRequestParameter( flag ),skip );
1543        }
1544
1545        /**
1546         * 【TAG】表示データを作成する場合のフォーマットの行数をセットします(初期値:2)。
1547         *
1548         * @og.tag 表示データを作成する場合のフォーマットの行数をセットします。
1549         *
1550         * @og.rev 3.3.1.1 (2003/07/03) {&#064;XXXX} 変数が使用できるように修正。
1551         *
1552         * @param       rowspan フォーマットの行数
1553         */
1554        public void setRowspan( final String rowspan ) {
1555                this.rowspan = getRequestParameter(rowspan);
1556        }
1557
1558        /**
1559         * 【TAG】表示時の選択用オブジェクトのタイプ[checkbox/radio/hidden]を指定します(初期値:checkbox)。
1560         *
1561         * @og.tag
1562         * 複数選択可能時は "checkbox" を指定します。
1563         * 一つだけ選ばせる場合は, "radio" を指定します。
1564         * 隠しフィールドで全件を選ぶ場合は、"hidden" を指定します。
1565         * 初期値は、"checkbox" です。
1566         *
1567         * @og.rev 3.3.1.1 (2003/07/03) {&#064;XXXX} 変数が使用できるように修正。
1568         *
1569         * @param       type 選択用オブジェクトのタイプ[checkbox:複数選択/radio:一つだけ/hidden:全件選択]
1570         */
1571        public void setSelectedType( final String type ) {
1572                selectedType = nval( getRequestParameter(type),selectedType );
1573        }
1574
1575        /**
1576         * 【TAG】表示時の行番号の表示方法[sequence/none/delete/skip=カラム名/view=カラム名]を指定します(初期値:sequence)。
1577         *
1578         * @og.tag
1579         * ・sequenceは、1から始まる連番です。
1580         * ・none を指定すると、番号は表示されません。
1581         * ・delete を指定すると、行番号表示そのもののタグを取り除きます。(3.5.5.0 追加)
1582         * ・skip=カラム名を指定すると、そのカラムの値が NULL の場合は、番号をスキップします。
1583         * ・view=カラム名を指定すると、そのカラムの値が、使用されます。(ラベルは付きません)
1584         * skip=XX と、view=XX は、=の前後にスペースを入れないで下さい。
1585         * 初期値は、"sequence" です。
1586         *
1587         * @og.rev 3.5.1.0 (2003/10/03) 新規作成
1588         *
1589         * @param       type 行番号の表示方法のタイプ [sequence:連番/none:非表示/delete:タグ削除/skip=カラム名/view=カラム名]
1590         */
1591        public void setNumberType( final String type ) {
1592                numberType = nval( getRequestParameter(type),numberType );
1593        }
1594
1595        /**
1596         * 【TAG】テーブル等のチェックボックスに属性を付加します。
1597         *
1598         * @og.tag
1599         * JavaScript などの HTML基本タグ以外の属性を、そのまま
1600         * チェックボックス/ラジオボタン等に使用します。
1601         * そのときに、(')は、(")に置き換えます。
1602         *
1603         * @param       attributes HTML基本タグ以外の属性
1604         */
1605        public void setOptionTypeAttributes( final String attributes ) {
1606                String optAttri = getRequestParameter( attributes );
1607                if( optAttri != null && optAttri.length() > 0 ) {
1608                        optTypeAttri = optAttri.replace( '\'', '\"' );
1609                }
1610        }
1611
1612        /**
1613         * 【TAG】チェックボックスの全チェックを選択するJavaScript の機能を使用するかどうかを指定します
1614         *              (初期値:VIEW_USE_CHECK_CONTROL[={@og.value org.opengion.hayabusa.common.SystemData#VIEW_USE_CHECK_CONTROL}])。
1615         *
1616         * @og.tag
1617         * "true" で、コントロール用のチェックボックスが現れて、この機能を使用することができるようになります。
1618         * false は、従来どおりです。
1619         * 使用するにあたり、jsp/commpn/default.js にJavaScriptを設定しておきます。(設定済み)
1620         * false は、0でも代用可能です。true は、1でも代用可能です。
1621         * checked は、2でも代用可能です。checked は、初期値を、チェック済みにします。
1622         * 注意:0,1,2,true,false,checked 以外の文字をセットすると、エラーが発生します。
1623         * writable,checked,useCheckControl については、writable が最優先で
1624         * 次に、useCheckControl="2"(または、checked)、次に、checked を判定します。
1625         * checked="true"の場合は、useCheckControl が、"1"(true)以上の場合、
1626         * "2"(checked)に設定されます。
1627         * (初期値:ユーザー定数のVIEW_USE_CHECK_CONTROL[={@og.value org.opengion.hayabusa.common.SystemData#VIEW_USE_CHECK_CONTROL}])。
1628         *
1629         * @og.rev 3.5.4.3 (2004/01/05) 新規追加
1630         * @og.rev 3.7.0.1 (2005/01/31) 全件チェックコントロールのロジック変更(useCheckControl)
1631         *
1632         * @param       flag チェックボックスの全チェックを選択する機能を使用するかどうか
1633         *                      (true,1:使用する/false,0:使用しない/checked,2:初期値チェック済み)
1634         * @see         org.opengion.hayabusa.common.SystemData#VIEW_USE_CHECK_CONTROL
1635         */
1636        public void setUseCheckControl( final String flag ) {
1637                useCheckControl = intCase( getRequestParameter(flag) );
1638
1639                if( useCheckControl < 0 ) {
1640                        String errMsg = "useCheckControl は、false(0)/true(1)/2 のいずれかしか登録できません。["
1641                                                 + flag + "]";
1642                        throw new HybsSystemException( errMsg );
1643                }
1644        }
1645
1646        /**
1647         * 【TAG】ヘッダーにソート用リンクを作成するかどうか[true/false]を指定します
1648         *              (初期値:VIEW_USE_TABLE_SORTER[={@og.value org.opengion.hayabusa.common.SystemData#VIEW_USE_TABLE_SORTER}])。
1649         *
1650         * @og.tag
1651         * "true" で、ヘッダーにソート用リンクを作成します。
1652         * false は、従来どおりです。
1653         * 検索済みのDBTableModelを、メモリ上でソートし、再表示させます。
1654         *              (初期値:ユーザー定数のVIEW_USE_TABLE_SORTER[={@og.value org.opengion.hayabusa.common.SystemData#VIEW_USE_TABLE_SORTER}])。
1655         *
1656         * @og.rev 3.5.4.7 (2004/02/06) 新規追加
1657         *
1658         * @param       flag ヘッダーにソート用リンクを作成するかどうか [true:作成する/false:作成しない]
1659         * @see         org.opengion.hayabusa.common.SystemData#VIEW_USE_TABLE_SORTER
1660         */
1661        public void setUseTableSorter( final String flag ) {
1662                useTableSorter = nval( getRequestParameter(flag),useTableSorter );
1663        }
1664
1665        /**
1666         * 表示データをプレビュー可能かどうかを返します。
1667         *
1668         * 不可能な状態とは,すでに一番先頭から表示されている場合です。
1669         *
1670         * @return      プレビュー可能(true)/不可能(false)
1671         */
1672        private boolean isPrev() {
1673                if( startNo <= 0 ) {
1674                        return false;
1675                }
1676                return true;
1677        }
1678
1679        /**
1680         * 表示データをネクスト可能かどうかを返します。
1681         *
1682         * 不可能な状態とは,すでに一番後ろが表示されている場合です。
1683         *
1684         * @return      ネクスト可能(true)/不可能(false)
1685         */
1686        private boolean  isNext() {
1687                if( (startNo + pageSize) >= table.getRowCount() ) {
1688                        return false;
1689                }
1690                return true;
1691        }
1692
1693        /**
1694         * コマンドを実行します。
1695         *
1696         * コマンドは,HTMLから(get/post)指定されますので,setCommand()メソッドで
1697         * 登録します。
1698         * コマンドを登録すると同時に,実行も行ないます。
1699         *
1700         * @og.rev 3.8.0.8 (2005/10/03) その他のコマンドを CMD_XXX にします。
1701         *
1702         * @param       command コマンド(public static final 宣言されている文字列)
1703         * @see         <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.ViewFormTag.CMD_PREV">コマンド定数</a>
1704         */
1705        private void commandExec( final String command ) {
1706                if(      CMD_PREV.equals(       command ) ) { prev() ;  }
1707                else if( CMD_NEXT.equals(       command ) ) { next() ;  }
1708                else if( CMD_FIRST.equals(      command ) ) { first() ; }
1709                else if( CMD_LAST.equals(       command ) ) { last() ;  }
1710        //      else if( CMD_NEW.equals(        command ) ) {}          // 何もしない
1711        //      else if( CMD_REVIEW.equals( command ) ) {}              // 何もしない
1712        //      else if( CMD_RESET.equals(      command ) ) {}          // 何もしない
1713                else if( CMD_VIEW.equals(       command ) ) { view() ;  }
1714                // 3.8.0.8 (2005/10/03) その他のコマンドを CMD_XXX にします。
1715                else if( CMD_XXX.equals(        command ) ) { view() ;  }
1716                this.command = null;
1717        }
1718
1719        /**
1720         * HTMLデータの表示をプレビュー(戻し)します。
1721         *
1722         * @og.rev 3.0.1.3 (2003/03/11) startNo を隠しフィールドに持つ処理を、追加
1723         *
1724         */
1725        private void prev() {
1726                if( ! isPrev() ) { return ; }                   // prev 出来ない。
1727                tempStartNo = tempStartNo - pageSize;
1728                if( tempStartNo < 0 ) { tempStartNo = 0; }
1729                if( skip ) {
1730                        for( int i=startNo-1; i>=0; i-- ) {
1731                                if( form.isMarked( i ) ) {
1732                                        startNo = i;
1733                                        break;
1734                                }
1735                        }
1736                        return ;
1737                }
1738
1739                startNo = startNo - pageSize;
1740                if( startNo < 0 ) {
1741                        startNo = 0;
1742                }
1743        }
1744
1745        /**
1746         * HTMLデータの表示をネクスト(先送り)します。
1747         *
1748         * @og.rev 3.0.1.3 (2003/03/11) startNo を隠しフィールドに持つ処理を、追加
1749         *
1750         */
1751        private void next() {
1752                if( ! isNext() ) { return ; }                   // next 出来ない。
1753                tempStartNo = tempStartNo + pageSize;
1754                if( skip ) {
1755                        int end  = table.getRowCount();
1756                        for( int i=startNo+1; i<end; i++ ) {
1757                                if( form.isMarked( i ) ) {
1758                                        startNo = i;
1759                                        break;
1760                                }
1761                        }
1762                        return ;
1763                }
1764
1765                startNo = startNo + pageSize;
1766        }
1767
1768        /**
1769         * HTMLデータの表示をファースト(最初)します。
1770         *
1771         * @og.rev 3.0.1.3 (2003/03/11) startNo を隠しフィールドに持つ処理を、追加
1772         *
1773         */
1774        private void first() {
1775                tempStartNo = 0;
1776                if( tempStartNo < 0 ) { tempStartNo = 0; }
1777                if( skip ) {
1778                        int end  = table.getRowCount();
1779                        for( int i=startNo; i<end; i++ ) {
1780                                if( form.isMarked( i ) ) {
1781                                        startNo = i;
1782                                        break;
1783                                }
1784                        }
1785                        return ;
1786                }
1787
1788                startNo = 0;
1789        }
1790
1791        /**
1792         * HTMLデータの表示をラスト(最後)します。
1793         *
1794         * @og.rev 3.0.1.3 (2003/03/11) startNo を隠しフィールドに持つ処理を、追加
1795         *
1796         */
1797        private void last() {
1798                tempStartNo = table.getRowCount() - pageSize;
1799                if( tempStartNo < 0 ) { tempStartNo = 0; }
1800                if( skip ) {
1801                        for( int i=startNo; i>=0; i-- ) {
1802                                if( form.isMarked( i ) ) {
1803                                        startNo = i;
1804                                        break;
1805                                }
1806                        }
1807                        return ;
1808                }
1809
1810                startNo = table.getRowCount() - pageSize;
1811                if( startNo < 0 ) { startNo = 0; }
1812        }
1813
1814        /**
1815         * HTMLデータの表示をします。
1816         *
1817         */
1818        private void view() {
1819                if( skip ) {
1820                        int end  = table.getRowCount();
1821                        for( int i=startNo; i<end; i++ ) {
1822                                if( form.isMarked( i ) ) {
1823                                        startNo = i;
1824                                        break;
1825                                }
1826                        }
1827                        return ;
1828                }
1829        }
1830
1831        /**
1832         * startNo,pageSize,pagePlus の初期値を設定する。
1833         *
1834         * @og.rev 3.0.1.3 (2003/03/11) startNo を隠しフィールドに持つ処理を、追加
1835         * @og.rev 3.5.4.1 (2003/12/01) startNo をキャッシュから取り出すように変更。
1836         * @og.rev 3.5.4.7 (2004/02/06) getStartNoKeyメソッドの廃止(getRequestCacheDataを利用)
1837         * @og.rev 3.7.0.2 (2005/02/14) NEXT 時に何も選択しないで追加した場合は、1件目から表示する。
1838         * @og.rev 3.8.0.8 (2005/10/03) その他のコマンドを CMD_XXX にします。
1839         *
1840         */
1841        private void setDefaultParameter() {
1842                // 3.7.0.2 (2005/02/14)
1843                // 3.8.0.8 (2005/10/03) その他のコマンドを CMD_XXX にします。
1844                if( CMD_XXX.equals( command ) ) {
1845                        String[] selected = getRequestValues( HybsSystem.ROW_SEL_KEY ) ;
1846                        if( selected == null || selected.length == 0 ) {
1847                                startNo = 0;
1848                                tempStartNo = startNo;
1849                        }
1850                }
1851
1852                if( startNo<0 ) {
1853                        startNo = nval( getRequestCacheData( START_NO_KEY ),form.getStartNo() ) ;
1854                        tempStartNo = startNo;
1855                }
1856
1857                if( pageSize<0 ) {
1858                        pageSize = nval( getRequestValue( PAGE_SIZE_KEY ),form.getPageSize() ) ;
1859                }
1860
1861                if( pagePlus<0 ) {
1862                        pagePlus = nval( getRequestValue( PAGE_PLUS_KEY ),0 ) ;
1863                }
1864
1865        }
1866
1867        /**
1868         * 内部タグの TheadTag / TbodyTag / TfootTag より、個々のフォーマットを定義する
1869         * 為のTableFormatter オブジェクトを受け取る。
1870         *
1871         * @og.rev 3.5.4.0 (2003/11/25) 新規登録(setAttributes メソッドより移行)
1872         *
1873         * @param       form TableFormatterオブジェクト
1874         */
1875        protected void addFormatter( final TableFormatter form ) {
1876                if( values == null ) { values = new ArrayList<TableFormatter>(); }
1877                values.add( form );
1878        }
1879
1880        /**
1881         * pageSize をhidden属性で出力するタグを作成します。
1882         *
1883         * @og.rev 3.5.4.0 (2003/11/25) command="RESET"時に、戻った画面のpageSize がクリアされてしまう対応。
1884         * @og.rev 3.5.5.5 (2004/04/23) hidden の出力に、XHTMLTag.hidden を使用します。
1885         *
1886         * @param       pageSize        ページサイズ
1887         *
1888         * @return      hidden属性で出力するタグ
1889         */
1890        private String makePageSize( final int pageSize ) {
1891                String name   = PAGE_SIZE_KEY;
1892                String value  = String.valueOf( pageSize );
1893
1894                return XHTMLTag.hidden( name,value );   // 3.5.5.5 (2004/04/23)
1895        }
1896
1897        /**
1898         * consistencyKey をhidden属性で出力するタグを作成します。
1899         * 出力する条件は、useConsistency="true" (初期値)、で
1900         * scope が、 request 以外の場合です。
1901         * tableId が設定された場合は、consistencyKey に、tableId を加えた
1902         * キーにします。
1903         *
1904         * @og.rev 3.5.5.5 (2004/04/23) DBTableModel の整合性パラメータを hidden で出力します。
1905         * @og.rev 3.5.5.5 (2004/04/23) hidden の出力に、XHTMLTag.hidden を使用します。
1906         * @og.rev 3.5.5.8 (2004/05/20) makeConsistencyKey メソッドに処理ロジックを移します。
1907         *
1908         */
1909        private void makeConsistencyKey() {
1910                if( useConsistency && ! "request".equals( getScope() ) ) {
1911                        String name   = HybsSystem.CONSISTENCY_KEY;
1912                        String value  = table.getConsistencyKey() ;
1913
1914                        jspPrint( XHTMLTag.hidden( name,value ) );
1915                }
1916        }
1917
1918        /**
1919         * "false","true","checked" の文字列を、それぞれ、0,1,2 に対応した数字に変換します。
1920         * それ以外の文字列は、-1 にします。
1921         *
1922         * @og.rev 3.7.0.1 (2005/01/31) 新規作成
1923         *
1924         * @param    flag 文字列 (true=1 , false=0 , checked=2) の文字列
1925         *
1926         * @return   設定値(0,1,2の数字、不正な場合は、-1 を返す。
1927         */
1928        private static int intCase( final String flag ) {
1929                int rtn = -1;
1930                if( "FALSE".equalsIgnoreCase( flag ) || "0".equalsIgnoreCase( flag ) ) {
1931                        rtn = 0;
1932                }
1933                else if( "TRUE".equalsIgnoreCase( flag ) || "1".equalsIgnoreCase( flag ) ) {
1934                        rtn = 1;
1935                }
1936                else if( "CHECKED".equalsIgnoreCase( flag ) || "2".equalsIgnoreCase( flag ) ) {
1937                        rtn = 2;
1938                }
1939                return rtn ;
1940        }
1941
1942        /**
1943         * ViewForm のサブクラスに渡すパラメータマップ
1944         *
1945         * @og.rev 3.5.4.8 (2004/02/23) ViewParamTag のパラメータを追加します。
1946         *
1947         * @param       map パラメータマップ
1948         */
1949        protected void setParam( final Map<String,String> map ) {
1950                viewParam = map ;
1951        }
1952
1953        /**
1954         * ViewForm のサブクラスに渡すパラメータ(文字列配列のArrayList)を設定します。
1955         *
1956         * @og.rev 5.5.8.3 (2012/11/17) 新規作成(スタックガント対応)
1957         * @og.rev 5.5.9.0 (2012/12/03) objectからArrayListに変更
1958         *
1959         * @param       list 文字列配列のArrayList
1960         */
1961        protected void setViewArrayList( final List<String[]> list ) {
1962                viewArrayList = list;
1963        }
1964
1965        /**
1966         * 【TAG】パラメーターファイルの使用をするかどうか[true/false]を指定します(初期値:false)。
1967         *
1968         * @og.tag
1969         * "true" で、パラメータファイルを読み込むため、BODY部を処理します。
1970         * false は、パラメータファイうを使用しません。
1971         * パラメータファイルは、各ViewFormのサブクラス用に用意します。
1972         * 初期値は、false です。(false)
1973         *
1974         * @og.rev 3.5.4.8 (2004/02/23) 新規追加
1975         *
1976         * @param       flag パラメーターファイルを使用 [true:使用する/false:使用しない]
1977         */
1978        public void setUseParam( final String flag ) {
1979                useParam = nval( getRequestParameter(flag),useParam );
1980        }
1981
1982        /**
1983         * 【TAG】Consistency キー による整合性チェックを行うかどうか[true/false]を指定します(初期値:true)。
1984         *
1985         * @og.tag
1986         * 検索結果を DBTableModel にセットする時に、整合性キーの Consistency キーを
1987         * 作成します。これを、Viewタグでhidden出力しておき、Entryタグでデータ書き換え時に
1988         * 整合性チェックを行います。これは、IEの戻るボタンで戻った場合に、画面の
1989         * キーと検索結果の DBTableModel の内容が一致しない場合のエラーチェックに
1990         * なります。
1991         * この属性は、何らかのケースで、このエラーチェックを行いたくない場合に、
1992         * false に設定することで、整合性チェックを行いません。
1993         * 初期値は、true(整合性チェックを行う)です。
1994         *
1995         * @og.rev 3.5.5.7 (2004/05/10) 新規登録
1996         *
1997         * @param       ck      Consistency Key の使用するかどうか [true:行う/false:行わない]
1998         */
1999        public void setUseConsistency( final String ck ) {
2000                useConsistency = nval( getRequestParameter( ck ),useConsistency );
2001        }
2002
2003        /**
2004         * 【TAG】テーブルのバックグラウンドカラーの入れ替えのサイクルをセットします(初期値は、1:ゼブラ)。
2005         *
2006         * @og.tag
2007         * 0(ゼブラなし)、-1(ワーニング)、-2以下(エラー)、1(ゼブラ)、2以上(行数まとめ)
2008         * 初期値は、1(ゼブラ)です。
2009         *
2010         * @og.rev 3.5.6.2 (2004/07/05) 新規追加
2011         *
2012         * @param  sycle  0(ゼブラなし)、-1(ワーニング)、-2以下(エラー)、1(ゼブラ)、2以上(行数まとめ)
2013         */
2014        public void setBgColorCycle( final String sycle ) {
2015                bgColorCycle = nval( getRequestParameter( sycle ),bgColorCycle );
2016        }
2017
2018        /**
2019         * 【TAG】テーブルのバックグラウンドカラーのクラスに指定するカラム名を指定します。
2020         *
2021         * @og.tag
2022         * 通常のゼブラ模様は、tr 属性のクラス指定として、row_0、row_1 が指定されます。
2023         * その代わりに、ここで指定されたカラムの値がクラス属性として設定されます。
2024         * (指定するのはカラム名です。行単位にクラス属性の値を変えることが可能です。)
2025         * 選択行(row_sel)は、優先して使用されます。
2026         * 出力されるクラス名は、"row_" + 属性値 になります。
2027         *
2028         * @og.rev 5.1.8.0 (2010/07/01) 新規追加
2029         *
2030         * @param  clsClm ゼブラ模様の替わりに指定するクラスを格納したカラム名
2031         */
2032        public void setBgColorClsClm( final String clsClm ) {
2033                bgColorClsClm = nval( getRequestParameter( clsClm ),bgColorClsClm );
2034        }
2035
2036        /**
2037         * 【TAG】スクロールバー用のDIV要素を出力するかどうか[true/false]を指定します
2038         *              (初期値:VIEW_USE_SCROLLBAR[={@og.value org.opengion.hayabusa.common.SystemData#VIEW_USE_SCROLLBAR}])。
2039         *
2040         * @og.tag
2041         * スクロールバー対応する為、テーブルの先頭に、DIV要素を出力します。
2042         * (初期値:ユーザー定数のVIEW_USE_SCROLLBAR[={@og.value org.opengion.hayabusa.common.SystemData#VIEW_USE_SCROLLBAR}])。
2043         * ※ 互換性の関係より、false になっています。
2044         *
2045         * @og.rev 3.5.6.3 (2004/07/12) 新規追加
2046         *
2047         * @param  useBar  スクロールバー用のDIV要素を出力するかどうか[true:出力する/false:しない]
2048         * @see         org.opengion.hayabusa.common.SystemData#VIEW_USE_SCROLLBAR
2049         */
2050        public void setUseScrollBar( final String useBar ) {
2051                useScrollBar = nval( getRequestParameter( useBar ),useScrollBar );
2052        }
2053
2054        /**
2055         * 【TAG】viewLink や viewMarker の情報取り込みを制御する(初期値は、NEW,RENEW,REVIEW,RESET)。
2056         *
2057         * @og.tag
2058         * viewLink や viewMarker の情報取り込みは、command が、NEW,RENEW,REVIEW,RESET
2059         * の場合のみ行われています。
2060         * この属性で、"true" を指定すると、コマンドに無関係に取り込みます。
2061         * "false" の場合は、form にキャッシュしているリンク、マーカーを削除します。
2062         * 取り込み時に、viewLink や viewMarker オブジェクトが存在しない場合は、
2063         * 何もしません。これは、viewMarker オブジェクト自身がすでに設定済みの場合(VIEWなど)
2064         * NEXTやPREVでは、viewMarkerオブジェクトは、リクエスト変数に設定されない為です。
2065         * この場合は、登録しませんが、既存の viewMarkerオブジェクトを持っているはずなので、
2066         * なにも設定しなくても viewMarker は適用されます。
2067         * 初期値は、NEW,RENEW,REVIEW,RESET です。
2068         *
2069         * @og.rev 3.6.0.4 (2004/10/14) 新規追加
2070         *
2071         * @param  load  viewLink や viewMarker の情報取り込みを制御する
2072         */
2073        public void setLoadMarker( final String load ) {
2074                loadMarker = nval( getRequestParameter( load ),loadMarker );
2075        }
2076
2077        /**
2078         * 【TAG】SEL_ROW機能[true:有効/false:無効]を指定します
2079         *              (初期値:VIEW_USE_SELECTED_ROW[={@og.value org.opengion.hayabusa.common.SystemData#VIEW_USE_SELECTED_ROW}])。
2080         *
2081         * @og.tag
2082         * SEL_ROW機能は、戻るリンクから戻ったときや、登録したときに、選択していた
2083         * 行番号や、先にクリックされた行番号を返す機能で、SEL_ROW リクエストに設定された
2084         * 行がマーカーされます。この機能の有効(true)/無効(false)を指定します。
2085         * この属性で、"true" を指定すると、有効になります。
2086         * "false" の場合は、無効です。
2087         * (初期値:ユーザー定数のVIEW_USE_SELECTED_ROW[={@og.value org.opengion.hayabusa.common.SystemData#VIEW_USE_SELECTED_ROW}])。
2088         *
2089         * @og.rev 3.7.1.1 (2005/05/23) 新規追加
2090         *
2091         * @param  selRow  SEL_ROW機能の有効/無効を指定 [true:有効/false:無効]
2092         * @see         org.opengion.hayabusa.common.SystemData#VIEW_USE_SELECTED_ROW
2093         */
2094        public void setUseSelectedRow( final String selRow ) {
2095                useSelectedRow = nval( getRequestParameter( selRow ),useSelectedRow );
2096        }
2097
2098        /**
2099         * 【TAG】SEL_ROW使用時の選択行色変更[true:有効/false:無効]を指定します
2100         *              (初期値:VIEW_USE_SELROW_COLOR[={@og.value org.opengion.hayabusa.common.SystemData#VIEW_USE_SELROW_COLOR}])。
2101         *
2102         * @og.tag
2103         * SEL_ROW機能は、現在選択されている行まで、スクロールする機能ですが、そのとき、
2104         * 選択行にマーカーするかどうかを、指定します。
2105         * この属性で、"true" を指定すると、有効になります。
2106         * "false" の場合は、無効です。
2107         * (初期値:ユーザー定数のVIEW_USE_SELROW_COLOR[={@og.value org.opengion.hayabusa.common.SystemData#VIEW_USE_SELROW_COLOR}])。
2108         *
2109         * @og.rev 3.7.1.1 (2005/05/31) 新規追加
2110         *
2111         * @param  selRowColor  SEL_ROW使用時の選択行色変更の有効/無効を指定 [true:有効/false:無効]
2112         * @see         org.opengion.hayabusa.common.SystemData#VIEW_USE_SELROW_COLOR
2113         */
2114        public void setUseSelRowColor( final String selRowColor ) {
2115                useSelRowColor = nval( getRequestParameter( selRowColor ),useSelRowColor );
2116        }
2117
2118        /**
2119         * 【TAG】 処理時間やページサイズなどの情報出力[true:有効/false:無効]を指定します(初期値:true)。
2120         *
2121         * @og.tag
2122         * ViewForm で、CustomData などの 非HTML表示ビューを使用する場合、
2123         * 最後に、処理時間とページサイズ(NEXT時に使用)などの情報を、hidden で
2124         * 出力していますが、これを制御するフラグをセットします。
2125         * true(有効)にすると、これらのHTMLが出力されます。false にすると、出力されません。
2126         * 初期値は、true(有効) です。
2127         *
2128         * @og.rev 3.7.1.1 (2005/05/23) 新規追加
2129         *
2130         * @param  useTag  情報出力の有効/無効を指定 [true:有効/false:無効]
2131         */
2132        public void setUseAfterHtmlTag( final String useTag ) {
2133                useAfterHtmlTag = nval( getRequestParameter( useTag ),useAfterHtmlTag );
2134        }
2135
2136        /**
2137         * 【TAG】設定値に "_" が含まれている場合にレンデラーを使用するカラムをCSV形式で指定します。
2138         *
2139         * @og.tag
2140         * これは、従来の カラム定義の WRITABLE エディターと同等の働きを行うように
2141         * カラム属性を指定します。
2142         * WRITABLE エディターは、設定値にアンダーバー "_" が含まれている場合に、
2143         * その値を書込み禁止にする機能です。これは、エディター自身が値を判断して
2144         * 書き込み許可か禁止かを判断しています。
2145         * この動きを汎用的にするため、指定のカラムをカンマ区切り文字(CSV)で指定
2146         * することにより、レンデラーとエディターを設定値によって動的に切り替える
2147         * 機能を実現します。
2148         * その場合、表示/編集ともに、先頭のアンダーバーは削除されます。
2149         * また、全カラムについて、有効にする場合は、writableControl="*" を設定します。
2150         *
2151         * @og.rev 3.8.0.9 (2005/10/17) 新規追加
2152         *
2153         * @param  wrtCtrl 書き込み制御を行いたいカラムをCSV形式で指定
2154         */
2155        public void setWritableControl( final String wrtCtrl ) {
2156                writableControl = nval( getRequestParameter( wrtCtrl ),writableControl );
2157        }
2158
2159        /**
2160         * 【TAG】HILIGHT_ROW機能[true:有効/false:無効]を指定します
2161         *              (初期値:VIEW_USE_HILIGHT_ROW[={@og.value org.opengion.hayabusa.common.SystemData#VIEW_USE_HILIGHT_ROW}])。
2162         *
2163         * @og.tag
2164         * HILIGHT_ROW機能は、チェックボックスやラジオボタンで行選択した際に、どの行が選択されたか
2165         * 判るように行のハイライト表示を行う機能です。
2166         * さらに、行の任意の箇所をクリックしても、チェックが入り、ハイライト表示されます。
2167         * この属性で、"true" を指定すると、有効になります。
2168         * "false" の場合は、無効です。
2169         * (初期値:ユーザー定数のVIEW_USE_HILIGHT_ROW[={@og.value org.opengion.hayabusa.common.SystemData#VIEW_USE_HILIGHT_ROW}])。
2170         *
2171         * @og.rev 3.8.6.0 (2006/09/29) HILIGHT_ROW機能の有効/無効を指定します。
2172         *
2173         * @param  hilightRow  HILIGHT_ROW機能の有効/無効を指定 [true:有効/false:無効]
2174         * @see         org.opengion.hayabusa.common.SystemData#VIEW_USE_HILIGHT_ROW
2175         */
2176        public void setUseHilightRow( final String hilightRow ) {
2177                useHilightRow = nval( getRequestParameter( hilightRow ),useHilightRow );
2178        }
2179
2180        /**
2181         * 【TAG】ogPopup で検索結果の値を返すキーを、CSV形式で指定します。
2182         *
2183         * @og.tag
2184         * popup の検索結果を返す画面で、結果のラジオボタンにイベントセットします。
2185         * この場合、オープンもとのwindow に値を返しますが、そのキーをCSV形式で
2186         * 指定します。
2187         * なお、このメソッドは、一覧表示(HTMLTable)関係のビューのみでサポートして
2188         * いますが、チェックメソッドの関係で、それ以外のビューに適用しても素通り
2189         * するようにします。(エラーにしません)
2190         *
2191         * @og.rev 3.8.6.1 (2006/10/20) 新規追加
2192         *
2193         * @param  rtnKeys ogPopupで値を返すカラム文字列(CSV形式)
2194         */
2195        public void setPopupReturnKeys( final String rtnKeys ) {
2196                popupReturnKeys = nval( getRequestParameter( rtnKeys ),popupReturnKeys );
2197        }
2198
2199        /**
2200         * 【TAG】table要素に対して class 属性を設定します(初期値:viewTable)。
2201         *
2202         * @og.tag
2203         * Javaの言語使用上、class で作成できないため、代用として
2204         * clazz を使用している。
2205         * html で作成される属性は、 class で作成される。
2206         * 初期値は、"viewTable" です。
2207         *
2208         * @og.rev 4.0.0.0 (2007/04/16) 新規追加
2209         *
2210         * @param       cls     class属性を表す文字列
2211         */
2212        public void setClazz( final String cls ) {
2213                clazz = nval( getRequestParameter( cls ),clazz );
2214        }
2215
2216        /**
2217         * 【TAG】ビューの高さを指定します。
2218         *
2219         * @og.tag
2220         * id=posDivのDIV要素に高さを指定します。
2221         * javascriptからこの高さを見てビューの高さを決定します。
2222         * 単位も指定して下さい。
2223         *
2224         * @og.rev 4.2.0.0 (2008/03/18) 新規追加
2225         *
2226         * @param       high    class属性を表す文字列
2227         */
2228        public void setHeight( final String high ) {
2229                height = nval( getRequestParameter( high ), height );
2230        }
2231
2232        /**
2233         * 【TAG】ビューの幅を指定します。
2234         *
2235         * @og.tag
2236         * id=posDivのDIV要素に幅を指定します。
2237         * javascriptからこの値を見てビューの幅を決定します。
2238         * 単位も指定して下さい。(%指定推奨)
2239         *
2240         * @og.rev 4.2.0.0 (2008/03/18) 新規追加
2241         *
2242         * @param       wide    指定するビューの幅
2243         */
2244        public void setWidth( final String wide ) {
2245                width = nval( getRequestParameter( wide ), width );
2246        }
2247
2248        /**
2249         * 【TAG】ファイルダウンロード時の抜出カラム名(CSV形式)を指定します。
2250         *
2251         * @og.tag
2252         * fileUDのファイル抜出時のカラムをカンマ形式で指定します。
2253         *
2254         * @og.rev 4.3.0.0 (2008/07/04) 新規追加
2255         *
2256         * @param       dwnClms 抜出カラム名(CSV形式)
2257         */
2258        public void setFileDwnClms( final String dwnClms ) {
2259                fileDwnClms = nval( getRequestParameter( dwnClms ), fileDwnClms );
2260        }
2261
2262        /**
2263         * 【TAG】編集行のみを表示するかを指定します。
2264         *
2265         * @og.tag
2266         * 編集行のみを表示するかを指定します。trueがセットされた場合、編集行(改廃Cがついている行)
2267         * のみが出力されます。
2268         *
2269         * @og.rev 4.3.1.0 (2008/09/08)
2270         *
2271         * @param       sne     編集行のみを出力するか
2272         */
2273        public void setSkipNoEdit( final String sne ) {
2274                skipNoEdit = nval( getRequestParameter( sne ), skipNoEdit );
2275        }
2276
2277        /**
2278         * 【TAG】(通常は使いません)画面遷移を行わない形式の登録方法を使用するかを指定します。
2279         *
2280         * @og.tag
2281         * 画面遷移なしの登録を行うかどうかを指定します。
2282         * trueが指定された場合、HTML出力時に、各行に対して、行番号と改廃Cが属性情報として付加されます。
2283         * ここで出力された情報を元に、JavaScriptの入れ替え処理を行います。
2284         *
2285         * この値は、og:headタグで設定値、または前画面からの値を継承するため、通常、この属性ではセットしません。
2286         *
2287         * @og.rev 4.3.3.0 (2008/10/01) 新規追加
2288         * @og.rev 5.1.3.0 (2010/02/01) noTransition、ajaxSubmitのコントロールは、requestで行う。
2289         *
2290         * @param   noTrnstn 画面遷移を行わない形式の登録方法を使用するか
2291         */
2292        public void setNoTransition( final String noTrnstn ) {
2293                setNoTransitionRequest( nval( getRequestParameter( noTrnstn ), isNoTransitionRequest() ) );
2294        }
2295
2296        /**
2297         * 【TAG】選択行ハイライトの制御をチェックボックスのみで有効にするかを指定します
2298         *              (初期値:VIEW_USE_HILIGHT_CHECK_ONLY[={@og.value org.opengion.hayabusa.common.SystemData#VIEW_USE_HILIGHT_CHECK_ONLY}])。
2299         *
2300         * @og.tag
2301         * 選択行ハイライトの制御をチェックボックスのみで有効にするかを指定します。
2302         * trueの場合、チェックボックスのみで有効になります。
2303         * falseの場合、行全体の各要素で有効になります。
2304         * trueにした場合、チェックボックスが存在しない行に対しては、ハイライトすることはできません。
2305         * (初期値:ユーザー定数のVIEW_USE_HILIGHT_CHECK_ONLY[={@og.value org.opengion.hayabusa.common.SystemData#VIEW_USE_HILIGHT_CHECK_ONLY}])。
2306         *
2307         * @og.rev 4.3.7.0 (2009/06/01) 新規追加
2308         *
2309         * @param   hiCkOnly 選択行ハイライトの制御をチェックボックスのみで有効にするか
2310         * @see         org.opengion.hayabusa.common.SystemData#VIEW_USE_HILIGHT_CHECK_ONLY
2311         */
2312        public void setUseHilightCheckOnly( final String hiCkOnly ) {
2313                useHilightCheckOnly = nval( getRequestParameter( hiCkOnly ), useHilightCheckOnly );
2314        }
2315
2316        /**
2317         * 【TAG】選択行のハイライト表示を行った場合に、行選択でRadioボタンにclickイベントを発行させるかどうかを指定します
2318         *              (初期値:VIEW_USE_HILIGHT_RADIO_CLICK[={@og.value SystemData#VIEW_USE_HILIGHT_RADIO_CLICK}])。
2319         *
2320         * @og.tag
2321         * trueの場合、clickイベントを発行させます。
2322         * falseの場合、従来通り、ハイライト表示でラジオのチェックは入りますが、イベントは発行されません。
2323         * 互換性を考えれば、false ですが、POPUP系で、行選択してしまうと、選択できなくなるため、
2324         * 行選択で、即POPUPが閉じる true にしておきます。
2325         * (初期値:ユーザー定数のVIEW_USE_HILIGHT_RADIO_CLICK[={@og.value SystemData#VIEW_USE_HILIGHT_RADIO_CLICK}])。
2326         *
2327         * @og.rev 5.9.32.0 (2018/05/02) 6.2.2.0 (2015/03/27)取り込み hilightRow で、行選択時にイベント発行可否を指定できるようにする。
2328         * @param   useClick 行選択でRadioボタンのclickイベント [true:発行する/false:発行しない]
2329         * @see         org.opengion.hayabusa.common.SystemData#VIEW_USE_HILIGHT_RADIO_CLICK
2330         */
2331        public void setUseHilightRadioClick( final String useClick ) {
2332                isHiRadioClick = nval( getRequestParameter( useClick ), isHiRadioClick );               // 6.0.2.5 (2014/10/31) refactoring
2333        }
2334
2335        /**
2336         * 【TAG】一括入力カラムのアシスト機能を利用するカラム名を、カンマ区切りで与えます。
2337         *
2338         * @og.tag
2339         * これは、カラムの書き込み時に、一括入力可能なカラムをヘッダーに表示し、
2340         * 一括登録できる機能を提供します。
2341         * この機能は、jsp/common/bulkSet.js JavaScript とともに提供されます。
2342         * IE については、クリップボードも利用できます。Ctrl-C と Ctrl-V でそれぞれ
2343         * 一連のカラムの値の取り出しと書き込みが可能になります。
2344         * (プルダウンの場合はオプションに上記が追加されます)
2345         * "*" を指定すると、すべてのカラムを(columnBulkSet)指定したことになります。
2346         * "-"を指定すると、全てのカラムに対して指定しなかった事となります。
2347         *
2348         * システムリソースで、VIEW_USE_DEFAULT_BULKSET を true に設定すると、初期値が "*"
2349         * になりますので、個別の view に設定しなくてもこの機能が使用できるようになります。
2350         *
2351         * この機能は一括入力の手間削減が目的なので、selectedType が radio の場合は、
2352         * この機能は無効になります。
2353         *
2354         * @og.rev 5.2.1.0 (2010/10/01) 新規作成
2355         * @og.rev 5.4.4.0 (2012/02/01) コメント追加
2356         *
2357         * @param       columnName      例:"OYA,KO,HJO,SU,DYSET,DYUPD"
2358         */
2359        public void setColumnBulkSet( final String columnName ) {
2360                columnBulkSet = nval( getRequestParameter(columnName),columnBulkSet );
2361        }
2362
2363        /**
2364         * タグの名称を、返します。
2365         * 自分自身のクラス名より、自動的に取り出せないため、このメソッドをオーバーライドします。
2366         *
2367         * @og.rev 4.0.0.0 (2005/01/31) 新規追加
2368         *
2369         * @return  タグの名称
2370         */
2371        @Override
2372        protected String getTagName() {
2373                return "view" ;
2374        }
2375
2376        /**
2377         * seqClmTableを使用するかどうかをチェックします
2378         *
2379         * ここではtableId,scope,項目名などで厳密にチェックを行い、これらが元の情報と合致しない場合は、
2380         * ViewFormTypeの置き換えを行わないようにします。
2381         *
2382         * @og.rev 5.1.6.0 (2010/05/01) 新規追加
2383         * @og.rev 5.3.6.0 (2011/06/01) Edit機能見直しによりメソッド名変更
2384         * @og.rev 5.7.7.3 (2014/06/27) カラムが存在しない場合の挙動変更
2385         * @og.rev 5.8.6.0 (2015/04/03) editColumnDisplay
2386         * @og.rev 5.8.7.1 (2015/05/22) エラー時はeditConfをnullとしておく
2387         *
2388         * @param       config  DBEditConfigオブジェクト
2389         */
2390        private void makeEditTable( final DBEditConfig config ) {
2391                String userViewClms = config.getViewClms();
2392                DBLastSql lastSql = (DBLastSql)getSessionAttribute( HybsSystem.DB_LAST_SQL_KEY );
2393                if( lastSql != null && lastSql.isGuiMatch( getGUIInfoAttri( "KEY" ) ) && lastSql.isTableMatch( tableId, getScope() ) ) {
2394                        // 1Queryに対して複数Viewがある場合(左右分割など)、Viewの各項目定義が'|'で分割されてセットされています。
2395                        int vwCnt = nval( (String)getRequestAttribute( "h_vwCnt" ), 0 );
2396                        String[] clmGroup = StringUtil.csv2Array( userViewClms, '|' );
2397                        if( clmGroup.length > vwCnt ) {
2398                                // AAA,!BBB,CCC,DDD,!EEE から!がついたカラムのみを取り除く(!がある項目は非表示)
2399                                String thisViewClms = ( "," + clmGroup[vwCnt] ).replaceAll( ",![^,]*", "" );
2400                                // 行カウントカラムを表示する。
2401                                if( table.getColumnNo( "rowCount", false ) >= 0 ) {
2402                                        thisViewClms += ",rowCount";
2403                                }
2404                                if( thisViewClms.length() > 0 ) {
2405                                        thisViewClms = thisViewClms.substring( 1 );
2406                                }
2407                                String[] clm = StringUtil.csv2Array( thisViewClms );
2408                                boolean isUse = true;
2409                                for( int i=0; i<clm.length; i++ ) {
2410                                        if( table.getColumnNo( clm[i], false ) < 0 ) {
2411                                                isUse = false;
2412                                                editConf = null; // 5.8.7.1 (2015/05/22)
2413                                                jspPrint( getResource().getLabel( editWarnwMsg, new String[] { getResource().getLabel(clm[i]) } ) + HybsSystem.BR ); // 5.7.7.3 (2014/06/27)
2414                                                break;
2415                                        }
2416                                }
2417                                if( isUse ) {
2418                                        viewFormType    = "HTMLSeqClmTable";
2419//                                      columnDisplay   = thisViewClms;
2420                                        editColumnDisplay = thisViewClms; // 5.8.6.0 (2015/04/03) 後からcolumnDisplayセット
2421                                        clmSeqDisplay   = thisViewClms;
2422//                                      noDisplay               = null;
2423                                        setRequestAttribute( "h_vwCnt", String.valueOf( vwCnt+1 ) );
2424                                }
2425                        }
2426                }
2427        }
2428
2429        /**
2430         * Viewで表示した項目をDBLastSqlにセットします。
2431         *
2432         * ここではtableId,scopeなどで厳密にチェックを行い、これらが元の情報と合致しない場合は、
2433         * DBLastSqlへのセットを行わないようにします。
2434         *
2435         * @og.rev 5.1.6.0 (2010/05/01) 新規追加
2436         * @og.rev 5.3.9.0 (2011/09/01) ヘッダーソートを行った場合、編集対象カラムが正しく表示されないバグを修正
2437         */
2438        private void setViewClms() {
2439                // 4.3.0.0 (2008/07/04) fileUD 対応。抜き出すカラムを指定します。
2440                DBLastSql lastSql = (DBLastSql)getSessionAttribute( HybsSystem.DB_LAST_SQL_KEY );
2441                if( lastSql != null ) {
2442                        String guikey = getGUIInfoAttri( "KEY" );
2443                        if( lastSql.isGuiMatch( guikey ) && lastSql.isTableMatch( tableId, getScope() ) && lastSql.isViewEditable() ) {
2444                                // 5.1.6.0 (2010/05/01) fileDwnClmsが指定されない場合は、Viewで表示されたカラムをセット
2445                                if( form.isEditable() ) {
2446
2447                                        // 5.3.9.0 (2011/09/01) リクエストに対して初めて処理する場合に対象カラムを一旦クリアする。
2448                                        boolean vwBln = nval( (String)getRequestAttribute( "h_vwBln" ), false );
2449                                        if( !vwBln ) {
2450                                                lastSql.setViewClmNames( null );
2451                                                lastSql.setClmNames( null );
2452                                                setRequestAttribute( "h_vwBln", "true" );
2453                                        }
2454
2455                                        String clmNames = lastSql.getViewClmNames();
2456                                        if( clmNames == null || clmNames.length() == 0 ) {
2457                                                clmNames = nval( fileDwnClms, form.getViewClms() );
2458                                        }
2459                                        else {
2460                                                // 1Queryに対して複数Viewがある場合(左右分割など)、Viewの各項目定義が'|'で分割されてセットします。
2461                                                clmNames += "|" + nval( fileDwnClms, form.getViewClms() );
2462                                        }
2463                                        lastSql.setViewClmNames( clmNames );
2464                                        lastSql.setClmNames( clmNames.replace( "|", "," ) );
2465                                        setSessionAttribute( HybsSystem.DB_LAST_SQL_KEY,lastSql );
2466                                }
2467                                else {
2468                                        lastSql.setViewNotEditable();
2469                                }
2470                        }
2471                }
2472        }
2473
2474        /**
2475         * 【TAG】(通常使いません)Viewに関する情報をセッションに情報を登録するかどうかを指定します(初期値:true)。
2476         *
2477         * @og.tag
2478         * 同一画面IDで、複数のViewを表示する場合に利用します。
2479         * View関連の情報をセッションに登録し利用していますが、複数のViewが存在する場合に前の情報が上書きされてしまいます。
2480         * 複数のViewを利用する際に、メイン以外のViewの値をfalseに指定する事でセッションへの保存をしません。
2481         * (QueryTagのmainTransも同時に設定するか検討してください)
2482         *
2483         * 現段階では、セッション保存抑制を行う値はstartNoのみです。
2484         *
2485         * @og.rev 5.7.6.1 (2010/05/09) 新規作成
2486         *
2487         * @param  flag メイントランザクションかどうか
2488         */
2489        public void setMainView( final String flag ) {
2490                isMainView = nval( getRequestParameter( flag ),isMainView );
2491        }
2492
2493        /**
2494         * シリアライズ用のカスタムシリアライズ書き込みメソッド
2495         *
2496         * @og.rev 4.0.0.0 (2006/09/31) 新規追加
2497         * @serialData 一部のオブジェクトは、シリアライズされません。
2498         *
2499         * @param       strm    ObjectOutputStreamオブジェクト
2500         * @throws IOException  入出力エラーが発生した場合
2501         */
2502        private void writeObject( final ObjectOutputStream strm ) throws IOException {
2503                strm.defaultWriteObject();
2504        }
2505
2506        /**
2507         * シリアライズ用のカスタムシリアライズ読み込みメソッド
2508         *
2509         * ここでは、transient 宣言された内部変数の内、初期化が必要なフィールドのみ設定します。
2510         *
2511         * @og.rev 4.0.0.0 (2006/09/31) 新規追加
2512         * @serialData 一部のオブジェクトは、シリアライズされません。
2513         *
2514         * @param       strm    ObjectInputStreamオブジェクト
2515         * @see #release2()
2516         * @throws IOException  シリアライズに関する入出力エラーが発生した場合
2517         * @throws ClassNotFoundException       クラスを見つけることができなかった場合
2518         */
2519        private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
2520                strm.defaultReadObject();
2521        }
2522
2523        /**
2524         * このオブジェクトの文字列表現を返します。
2525         * 基本的にデバッグ目的に使用します。
2526         *
2527         * @return このクラスの文字列表現
2528         */
2529        @Override
2530        public String toString() {
2531                return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
2532                                .println( "VERSION"                     ,VERSION                        )
2533                                .println( "tableId"                     ,tableId                        )
2534                                .println( "viewFormId"          ,viewFormId                     )
2535                                .println( "viewFormType"        ,viewFormType           )
2536                                .println( "viewLinkId"          ,viewLinkId                     )
2537                                .println( "viewMarkerId"        ,viewMarkerId           )
2538                                .println( "command"                     ,command                        )
2539                                .println( "startNo"                     ,startNo                        )
2540                                .println( "tempStartNo"         ,tempStartNo            )
2541                                .println( "pageSize"            ,pageSize                       )
2542                                .println( "pagePlus"            ,pagePlus                       )
2543                                .println( "columnWritable"      ,columnWritable         )
2544                                .println( "noWritable"          ,noWritable                     )
2545                                .println( "columnDisplay"       ,columnDisplay          )
2546                                .println( "noDisplay"           ,noDisplay                      )
2547                                .println( "columnGroup"         ,columnGroup            )
2548                                .println( "noMessage"           ,noMessage                      )
2549                                .println( "writable"            ,writable                       )
2550                                .println( "checked"                     ,checked                        )
2551                                .println( "skip"                        ,skip                           )
2552                                .println( "rowspan"                     ,rowspan                        )
2553                                .println( "selectedType"        ,selectedType           )
2554                                .println( "numberType"          ,numberType                     )
2555                                .println( "optTypeAttri"        ,optTypeAttri           )
2556                                .println( "backLinkCount"       ,backLinkCount          )
2557                                .println( "headerSkipCount"     ,headerSkipCount        )
2558                                .println( "bodyString"          ,bodyString                     )
2559                                .println( "useCheckControl"     ,useCheckControl        )
2560                                .println( "useTableSorter"      ,useTableSorter         )
2561                                .println( "useParam"            ,useParam                       )
2562                                .println( "useConsistency"      ,useConsistency         )
2563                                .println( "bgColorCycle"        ,bgColorCycle           )
2564                                .println( "useScrollBar"        ,useScrollBar           )
2565                                .println( "sortKeys"            ,sortKeys                       )
2566                                .println( "loadMarker"          ,loadMarker                     )
2567                                .println( "useSelectedRow"      ,useSelectedRow         )
2568                                .println( "useSelRowColor"      ,useSelRowColor         )
2569                                .println( "useAfterHtmlTag"     ,useAfterHtmlTag        )
2570                                .println( "writableControl"     ,writableControl        )
2571                                .println( "hight"                       ,height                         )
2572                                .println( "width"                       ,width                          )
2573                                .println( "skipNoEdit"          ,skipNoEdit                     )
2574                                .println( "noTransition"        ,noTransition           )
2575                                .println( "useHilightCheckOnly",useHilightCheckOnly)
2576                                .println( "COMMAND_LIST"        ,COMMAND_LIST           )
2577                                .println( "Other..."    ,getAttributes().getAttribute() )
2578                                .fixForm().toString() ;
2579        }
2580}