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