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