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