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