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