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 org.opengion.hayabusa.common.HybsSystem; 019import org.opengion.hayabusa.common.HybsSystemException; 020import org.opengion.hayabusa.resource.GUIInfo; 021import org.opengion.hayabusa.resource.LabelInterface; 022import org.opengion.fukurou.system.OgBuilder ; // 6.4.4.1 (2016/03/18) 023import org.opengion.fukurou.util.XHTMLTag; 024import org.opengion.fukurou.util.ToString; // 6.1.1.0 (2015/01/17) 025import org.opengion.fukurou.util.StringUtil ; 026import org.opengion.fukurou.util.ArraySet; // 6.4.3.4 (2016/03/11) 027 028import static org.opengion.fukurou.util.StringUtil.nval ; 029 030import java.util.Locale ; 031import java.util.Set; // 6.4.3.4 (2016/03/11) 032 033/** 034 * サブミットボタンを表示するHTML拡張タグです(forward.jsp の commonForward タグと同時に使用します)。 035 * 036 * このタグは、value に指定された値+".jsp" の画面へサブミットします。 037 * その際、command に設定された値を 送信します。 038 * 従来は、value に、copy/modify/delete など、処理するJSPを個別に設定していましたので、 039 * command と lbl が未設定時には、value の値を使用していました。(下位互換性のため残しています) 040 * Ver5 になって、update.jsp ですべての処理を行う方向で開発するに当たり、 041 * command と lbl を記述する必要がでてきました。 042 * そこで、現在最新版では、action 属性を用意し、command を記述するだけで良くなりました。 043 * 044 * [action属性] [初期設定されるパラメータ郡] 045 * INSERT value="update" command="INSERT" lbl="INSERT" accesskey="I" 046 * COPY value="update" command="COPY" lbl="COPY" accesskey="C" 047 * MODIFY value="update" command="MODIFY" lbl="MODIFY" accesskey="M" 048 * DELETE value="update" command="DELETE" lbl="DELETE" accesskey="Z" 049 * VIEW value="update" command="VIEW" lbl="VIEW" accesskey="V" 6.3.9.1 (2015/11/27) 追加 050 * ENTRY value="entry" command="ENTRY" lbl="ENTRY" accesskey="E" 051 * RESET value="reset" command="RESET" lbl="ENTRY" accesskey="R" 052 * 053 * columnWritable , noWritable の属性追加(5.2.2.0 (2010/11/01)) 054 * これは、各コマンドごとに、次ページの view のカラム属性の設定に利用する属性です。 055 * Ver4 では、keys,vals の一般引数として設定していましたが、ここでは、専用属性として 056 * 用意しています。 057 * 058 * @og.formSample 059 * ●形式:<og:submit value="…" lbl="…" /> 060 * ●body:なし 061 * 062 * ●Tag定義: 063 * <og:submit 064 * action 【TAG】アクション(INSERT,COPY,MODIFY,DELETE,VIEW,ENTRY,RESET)を指定します 065 * value 【TAG】forward したいJSPファイル名を記述します(例:insert,copy,modify,delete など) 066 * command 【TAG】処理コマンドを登録します(初期値:大文字の value 属性値[INSERT,COPY,MODIFY,DELETE など]) 067 * gamenId 【TAG】gamenId 属性を登録します 068 * lbl 【TAG】ラベルリソースのラベルIDを指定します 069 * target 【TAG】サブミット先の文書を表示させるフレーム、またはウィンドウの名前を指定します 070 * keys 【TAG】ボタン専用のリクエストキーをCSV形式で複数指定します 071 * vals 【TAG】ボタン専用のリクエスト値をCSV形式で複数指定します 072 * roles 【TAG】ロールをセットします 073 * dbkeys 【TAG】commonForward の dbkeys にカラム指定を行います 074 * optionAttributes 【TAG】JavaScript などの HTML基本タグ以外の属性を、そのままタグとして使用します 075 * columnWritable 【TAG】書き込み可能カラム名を、CSV形式で与えます 076 * noWritable 【TAG】書き込み不可カラム名を、CSV形式で与えます 077 * caseKey 【TAG】このタグ自体を利用するかどうかの条件キーを指定します(初期値:null) 078 * caseVal 【TAG】このタグ自体を利用するかどうかの条件値を指定します(初期値:null) 079 * caseNN 【TAG】指定の値が、null/ゼロ文字列 でない場合(Not Null=NN)は、このタグは使用されます(初期値:判定しない) 080 * caseNull 【TAG】指定の値が、null/ゼロ文字列 の場合は、このタグは使用されます(初期値:判定しない) 081 * caseIf 【TAG】指定の値が、true/TRUE文字列の場合は、このタグは使用されます(初期値:判定しない) 082 * id 【HTML】要素に対して固有の名前(id)をつける場合に設定します 083 * lang 【HTML】要素の内容と他の属性値の言語(lang,xml:lang)を指定します 084 * dir 【HTML】文字表記の方向(dir)を指定します 085 * title 【HTML】要素に対する補足的情報(title)を設定します 086 * style 【HTML】この要素に対して適用させるスタイルシート(style)を設定します 087 * readonly 【TAG】その部品に対して変更が出来ないように(readonly)指定します(サーバーに送信される) 088 * disabled 【TAG】その部品に対して、選択や変更が出来ないように(disabled)指定します(サーバーに送信されない) 089 * tabindex 【HTML】タブの移動順(tabindex)を指定します(0 ~ 32767) 090 * accesskey 【HTML】アクセスキー(alt+キーで直接指定)を割り当てます 091 * clazz 【HTML】要素に対して class 属性を設定します 092 * language 【TAG】タグ内部で使用する言語コード[ja/en/zh/…]を指定します 093 * onClick 【HTML】JavaScriptのイベント onClick を設定します(例:onClick="renew('query.jsp','QUERY');") 094 * onBlur 【HTML】JavaScriptのイベント onBlur を設定します(例:onBlur="this.value=value.toUpperCase();") 095 * onFocus 【HTML】JavaScriptのイベント onFocus を設定します 096 * ondblClick 【HTML】JavaScriptのイベント ondblClick を設定します 097 * onMouseDown 【HTML】JavaScriptのイベント onMouseDown を設定します 098 * onMouseUp 【HTML】JavaScriptのイベント onMouseUp を設定します 099 * onMouseMove 【HTML】JavaScriptのイベント onMouseMove を設定します 100 * onMouseOut 【HTML】JavaScriptのイベント onMouseOut を設定します 101 * onMouseOver 【HTML】JavaScriptのイベント onMouseOver を設定します 102 * autofocus 【HTML5】指定した入力欄にカーソルが当たって自動的にフォーカスされます。 103 * img 【TAG】画像ボタンを作る場合の、画像ファイルを指定します 104 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 105 * /> 106 * 107 * ●使用例 108 * Ver5 推奨ケース:指定の action 属性に設定された値に応じた、value , command , lbl , accesskey を初期化します。 109 * (5.2.2.0 (2010/11/01)以降) 110 * <og:writeCheck> 111 * <og:submit action="COPY" noWritable="FGJ,UNIQ" /> 112 * <og:submit action="MODIFY" noWritable="CLM,FGJ,UNIQ" /> 113 * <og:submit action="DELETE" columnWritable="null" /> 114 * <og:submit gamenId="GF9110" value="index" dbkeys="SYSTEM_ID,LANG,CLM" command="NEW" lbl="GF9100" target="CONTENTS" /> 115 * <br /> 116 * </og:writeCheck> 117 * 118 * Ver4 一般的なケース:value は共通になったため、command と lbl の設定が必要(下位互換性のための設定) 119 * <og:writeCheck> 120 * <og:submit value="update" command="COPY" lbl="COPY" accesskey="C" /> 121 * <og:submit value="update" command="MODIFY" lbl="MODIFY" accesskey="M" /> 122 * <og:submit value="update" command="DELETE" lbl="DELETE" accesskey="Z" /> 123 * <og:submit gamenId="GF9110" value="index" dbkeys="SYSTEM_ID,LANG,CLM" command="NEW" lbl="GF9100" target="CONTENTS" /> 124 * <br /> 125 * </og:writeCheck> 126 * 127 * 従来のケース:value に設定された値JSPに対してサブミットされます。(下位互換性のための設定) 128 * <og:writeCheck> 129 * <og:submit value="copy" lbl="MSG0035" accesskey="C" /> 130 * <og:submit value="modify" lbl="MSG0036" accesskey="M" /> 131 * <og:submit value="delete" lbl="MSG0037" accesskey="Z" /> 132 * <og:submit gamenId="GF9110" value="index" dbkeys="SYSTEM_ID,LANG,CLM" command="NEW" lbl="GF9100" target="CONTENTS" /> 133 * <br /> 134 * </og:writeCheck> 135 * 136 * @og.rev 3.1.1.0 (2003/03/28) 新規作成 137 * @og.group 画面制御 138 * 139 * @version 4.0 140 * @author Kazuhiko Hasegawa 141 * @since JDK5.0, 142 */ 143public class SubmitTag extends HTMLTagSupport { 144 /** このプログラムのVERSION文字列を設定します。 {@value} */ 145 private static final String VERSION = "6.4.4.1 (2016/03/18)" ; 146 private static final long serialVersionUID = 644120160318L ; 147 148 // 5.2.2.0 (2010/11/01) 新規追加 149 /** command 引数に渡す事の出来る コマンド 新規 {@value} */ 150 public static final String ACT_INSERT = "INSERT" ; 151 /** command 引数に渡す事の出来る コマンド 複写 {@value} */ 152 public static final String ACT_COPY = "COPY" ; 153 /** command 引数に渡す事の出来る コマンド 変更 {@value} */ 154 public static final String ACT_MODIFY = "MODIFY" ; 155 /** command 引数に渡す事の出来る コマンド 削除 {@value} */ 156 public static final String ACT_DELETE = "DELETE" ; 157 /** 6.3.9.1 (2015/11/27) command 引数に渡す事の出来る コマンド 表示 {@value} */ 158 public static final String ACT_VIEW = "VIEW" ; 159 /** command 引数に渡す事の出来る コマンド エントリー {@value} */ 160 public static final String ACT_ENTRY = "ENTRY" ; 161 /** command 引数に渡す事の出来る コマンド リセット {@value} */ 162 public static final String ACT_RESET = "RESET" ; 163 164 // 6.4.3.4 (2016/03/11) String配列 から、Setに置き換えます。 165 private static final Set<String> ACTION_SET = new ArraySet<>( ACT_INSERT , ACT_COPY , ACT_MODIFY , ACT_DELETE , ACT_VIEW , ACT_ENTRY , ACT_RESET ); 166 167 /** 168 * enum 定義 169 * 170 * @og.rev 5.2.2.0 (2010/11/01) 新規追加 171 */ 172 private enum ENUM_ACTION { 173 // action value command lbl accesskey 174 INSERT( "update" , "INSERT" , "INSERT" , "I" ), 175 COPY ( "update" , "COPY" , "COPY" , "C" ), 176 MODIFY( "update" , "MODIFY" , "MODIFY" , "M" ), 177 DELETE( "update" , "DELETE" , "DELETE" , "Z" ), 178 VIEW ( "update" , "VIEW" , "VIEW" , "V" ), // 6.3.9.1 (2015/11/27) 179 ENTRY ( "entry" , "ENTRY" , "ENTRY" , "E" ), 180 RESET ( "reset" , "RESET" , "RESET" , "R" ) ; 181 182 private final String defVal ; 183 private final String defCmd ; 184 private final String defLbl ; 185 private final String defKey ; 186 187 /** 188 * enum のコンストラクタ 189 * 190 * @param val デフォルトの値(飛び先) 191 * @param cmd デフォルトのコマンド 192 * @param lbl デフォルトのラベル 193 * @param key デフォルトのaccesskey 194 */ 195 ENUM_ACTION( final String val , final String cmd , final String lbl , final String key ) { 196 defVal = val; 197 defCmd = cmd; 198 defLbl = lbl; 199 defKey = key; 200 } 201 202 /** 203 * デフォルトの値(飛び先) を返します。 204 * 205 * @return デフォルトの値(飛び先) 206 */ 207 public String getDefVal() { return defVal; } 208 209 /** 210 * デフォルトのコマンド を返します。 211 * 212 * @return デフォルトのコマンド 213 */ 214 public String getDefCmd() { return defCmd; } 215 216 /** 217 * デフォルトのラベル を返します。 218 * 219 * @return デフォルトのラベル 220 */ 221 public String getDefLbl() { return defLbl; } 222 223 /** 224 * デフォルトのaccesskey を返します。 225 * 226 * @return デフォルトのaccesskey 227 */ 228 public String getDefKey() { return defKey; } 229 } 230 231 private static final String TYPE = "submit" ; 232 private static final String NAME = "command" ; 233 private static final String MARGIN = "<span style=\"width: 3px;\" ></span>" ; 234 235 private static final String IMG_PRE = "background: url("; // 5.5.0.0 (2012/03/01) 236 private static final String IMG_SUF = ") center center no-repeat;"; // 6.2.4.2 (2015/05/29) 237 238 private String action ; // 5.2.2.0 (2010/11/01) 239 private String command ; 240 private String value ; 241 private String gamenId ; 242 private String target ; // 3.5.5.2 (2004/04/02) 243 private String dbkeys ; // 4.0.0 (2007/05/23) 244 245 private String columnWritable ; // 5.2.2.0 (2010/11/01) 246 private String noWritable ; // 5.2.2.0 (2010/11/01) 247 248 private String bgImg ; // 5.5.0.0 (2012/03/01) 249 250 private String[] keys ; // 3.5.5.5 (2004/04/23) 251 private String[] vals ; // 3.5.5.5 (2004/04/23) 252 253 /** 254 * デフォルトコンストラクター 255 * 256 * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor. 257 */ 258 public SubmitTag() { super(); } // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。 259 260 /** 261 * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。 262 * 263 * @og.rev 5.2.2.0 (2010/11/01) 新規追加 264 * 265 * @return 後続処理の指示( SKIP_BODY ) 266 */ 267 @Override 268 public int doStartTag() { 269 // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応 270 if( useTag() ) { 271 // 5.1.8.0 (2010/07/01) 同時設定不可(columnWritable,noWritable) チェック 272 if( columnWritable != null && noWritable != null ) { 273 final String errMsg = "columnWritable と noWritable は同時に指定できません。" 274 + "columnWritable = [" + columnWritable 275 + "] , noWritable = [" + noWritable 276 + "]"; 277 throw new HybsSystemException( errMsg ); 278 } 279 280 // 5.2.2.0 (2010/11/01) action 属性による初期値の設定 281 if( action != null ) { 282 final ENUM_ACTION eact = ENUM_ACTION.valueOf( action ); 283 if( value == null ) { value = eact.getDefVal(); } 284 if( command == null ) { command = eact.getDefCmd(); } 285 if( getMsglbl() == null ) { setLbl( eact.getDefLbl() ); } 286 if( get( "accesskey" ) == null ) { set( "accesskey",eact.getDefKey() ); } 287 } 288 } 289 return SKIP_BODY ; 290 } 291 292 /** 293 * タグリブオブジェクトをリリースします。 294 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 295 * 296 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 297 * @og.rev 3.5.5.2 (2004/04/02) target 属性の追加 298 * @og.rev 3.5.5.5 (2004/04/23) keys,vals 属性の追加 299 * @og.rev 5.2.2.0 (2010/11/01) action,columnWritable,noWritable 属性の追加 300 * @og.rev 5.5.0.0 (2012/03/01) bgImg追加 301 */ 302 @Override 303 protected void release2() { 304 super.release2(); 305 action = null; // 5.2.2.0 (2010/11/01) 306 command = null; 307 value = null; 308 gamenId = null; 309 target = null; // 3.5.5.2 (2004/04/02) 310 keys = null; // 3.5.5.5 (2004/04/23) 311 vals = null; // 3.5.5.5 (2004/04/23) 312 dbkeys = null; // 4.0.0 (2007/05/23) 313 columnWritable = null; // 5.2.2.0 (2010/11/01) 314 noWritable = null; // 5.2.2.0 (2010/11/01) 315 bgImg = null; // 5.5.0.0 (2012/03/01) 316 } 317 318 /** 319 * サブミットボタンを作成します。 320 * 321 * @og.rev 3.3.1.1 (2003/07/03) ForwardManager クラスの廃止。飛び先のキャッシュを廃止します。 322 * @og.rev 3.5.5.2 (2004/04/02) target 属性の追加 323 * @og.rev 3.5.5.9 (2004/06/07) target 属性を、set ではなく add で追加。 324 * @og.rev 3.5.5.9 (2004/06/07) target 属性を、set ではなく add で追加。 325 * @og.rev 4.0.0.0 (2005/11/30) title 属性が未設定時の処理追加 326 * @og.rev 5.5.0.0 (2012/03/01) bgImg対応 327 * @og.rev 5.6.0.3 (2012/01/24) accesskey に ゼロ文字列を指定した場合、カッコ()だけが残ってしまう。 328 * @og.rev 6.2.4.2 (2015/05/29) スタイル属性追加時は、一番初めにする。 329 * @og.rev 6.4.4.1 (2016/03/18) StringBuilderの代わりに、OgBuilderを使用する。 330 * 331 * @return サブミットボタンタグ 332 * @og.rtnNotNull 333 */ 334 @Override 335 protected String makeTag() { 336 337 if( value == null ) { 338 final String errMsg = "value に null がセットされています。"; 339 throw new HybsSystemException( errMsg ); 340 } 341 342 String lbl = nval( getMsglbl(), value.toUpperCase( Locale.JAPAN ) ); 343 final String accesskey = get( "accesskey" ); 344 if( accesskey != null && ! accesskey.isEmpty() ) { // 5.6.0.3 (2012/01/24) 345 lbl = lbl + "(" + accesskey + ")" ; 346 } 347 348 // キャッシュエントリ 349 command = nval( command,value.toUpperCase(Locale.JAPAN) ); 350 final String valueLink = getValueLink( gamenId , value ); 351 if( valueLink == null ) { return ""; } // アクセス不可時は null 352 353 set( "type",TYPE ); 354 set( "name",NAME ); 355 set( "value",lbl ); 356 357 // 3.5.5.2 (2004/04/02) target 属性の追加 358 if( target != null ) { 359 add( "onClick","this.form.target='" + target + "'",";" ); // 3.5.5.9 (2004/06/07) 360 } 361 362 // 4.0.0 (2005/11/30) title 属性が未設定時の処理追加 363 if( get( "title" ) == null ) { 364 final LabelInterface msglbl = getLabelInterface(); 365 if( msglbl != null ) { 366 final String desc = msglbl.getDescription(); 367 if( desc != null && desc.length() > 0 ) { 368 set( "title",desc ); 369 } 370 } 371 } 372 373 // 5.5.0.0 Img対応 スタイル属性に追加する。 374 // 6.2.4.2 (2015/05/29) スタイル属性追加時は、一番初めにする。 375 if( bgImg != null && bgImg.length() > 0 ){ 376 final String style = get( "style" ); 377 if( style == null || style.isEmpty() ) { set( "style",IMG_PRE+bgImg+IMG_SUF ); } 378 else { set( "style",IMG_PRE+bgImg+IMG_SUF + style ); } 379 } 380 381 // 6.4.4.1 (2016/03/18) HiddenTagの作成タイミングを後ろに持って行きます。 382 // 3.3.1.1 (2003/07/03) ForwardManager クラスの廃止。飛び先のキャッシュを廃止します。 383 return new OgBuilder() 384 .appendCR( getHiddenTag( command, lbl, valueLink ) ) 385 .appendCR( XHTMLTag.input( getAttributes() ) , MARGIN ) 386 .toString() ; 387 388 } 389 390 /** 391 * 画面IDとvalue から、指定のURLを作成します。 392 * 画面へのアクセス許可が与えられていない場合は、null を返します。 393 * 394 * @og.rev 3.5.5.0 (2004/03/12) URLを求めるのに、GUIInfo#getRealAddress() を使用する。 395 * @og.rev 4.0.0.0 (2005/01/31) GUIInfoの実アドレスのパラメータを考慮する。 396 * 397 * @param gamenId 画面ID 398 * @param value 飛ばし先(XXXX.jspのXXXX部分) 399 * 400 * @return URL文字列(アクセス不可時は null) 401 * @og.rtnNotNull 402 */ 403 private String getValueLink( final String gamenId,final String value ) { 404 String link = value + ".jsp"; 405 406 if( gamenId != null && gamenId.length() > 0 ) { 407 final GUIInfo guiInfo = getGUIInfo( gamenId ); // 4.0.0 (2005/01/31) 408 if( guiInfo == null ) { return null; } // 見つからない場合は、アクセス不可 409 410 final String address = guiInfo.getRealAddress( link ); 411 link = getRequestParameter( address ); 412 } 413 414 return link ; 415 } 416 417 /** 418 * 【TAG】アクション(INSERT,COPY,MODIFY,DELETE,ENTRY,RESET)を指定します。 419 * 420 * @og.tag 421 * Ver5 になって、update.jsp ですべての処理を行う方向で開発するに当たり、 422 * command と lbl を記述する必要がでてきました。 423 * そこで、現在最新版では、action 属性を用意し、command を記述するだけで良くなりました。 424 * 425 * [action属性] [初期設定されるパラメータ郡] 426 * INSERT value="update" command="INSERT" lbl="INSERT" accesskey="I" 427 * COPY value="update" command="COPY" lbl="COPY" accesskey="C" 428 * MODIFY value="update" command="MODIFY" lbl="MODIFY" accesskey="M" 429 * DELETE value="update" command="DELETE" lbl="DELETE" accesskey="Z" 430 * VIEW value="update" command="VIEW" lbl="VIEW" accesskey="V" 6.3.9.1 (2015/11/27) 追加 431 * ENTRY value="entry" command="ENTRY" lbl="ENTRY" accesskey="E" 432 * RESET value="reset" command="RESET" lbl="ENTRY" accesskey="R" 433 * 434 * @og.rev 5.2.2.0 (2010/11/01) 新規追加 435 * @og.rev 6.3.4.0 (2015/08/01) Arrays.toString から String.join に置き換え。 436 * @og.rev 6.4.3.4 (2016/03/11) String配列 から、Setに置き換えます。 437 * 438 * @param act アクション文字列 439 * @see <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.SubmitTag.ACT_COPY">アクション定数</a> 440 */ 441 public void setAction( final String act ) { 442 action = getRequestParameter( act ); 443 444 if( ! check( action, ACTION_SET ) ) { 445 final String errMsg = "指定のアクションは実行できません。アクションエラー" + CR 446 + "action=[" + action + "] " + CR 447 + "actionList=" + String.join( ", " , ACTION_SET ) ; 448 throw new HybsSystemException( errMsg ); 449 450 } 451 } 452 453 /** 454 * 【TAG】forward したいJSPファイル名を記述します(例:insert,copy,modify,delete など)。 455 * 456 * @og.tag 457 * JSPファイル名は、標準で、insert,copy,modify,delete などと指定します。 458 * 実際には、各JSP画面(insert.jsp,copy.jsp,modify.jsp,delete.jsp )に 459 * リクエストが転送されます。 460 * このJSPファイル名は、同一画面ID内のフォルダに属している必要があります。 461 * ここのIDは、JSP画面そのものですので、大文字小文字は区別されます。 462 * 463 * @param val JSPファイル名 (insert,copy,modify,delete など) 464 */ 465 public void setValue( final String val ) { 466 value = nval( getRequestParameter( val ),value ); 467 if( value == null ) { 468 final String errMsg = "value に null がセットされています。"; 469 throw new HybsSystemException( errMsg ); 470 } 471 } 472 473 /** 474 * 【TAG】画面ID を指定します。 475 * 476 * @og.tag 477 * gamenId 属性は、別の画面にforward する場合に使用します。 478 * 実際は、forward ではなく、sendRedirect されます。 479 * 480 * @param id 画面ID 481 */ 482 public void setGamenId( final String id ) { 483 gamenId = nval( getRequestParameter( id ),gamenId ); 484 } 485 486 /** 487 * 隠し属性タグを取得します。 488 * 各ボタンに設定された値を、隠しフィールドに設定して受け渡しします。 489 * 490 * @og.rev 3.3.1.1 (2003/07/03) ForwardManager クラスの廃止。飛び先のキャッシュを廃止します。 491 * @og.rev 3.5.5.5 (2004/04/23) 余計なボタン関連情報を転送しない為に、キーを変更します。 492 * @og.rev 3.5.5.5 (2004/04/23) keys,vals 属性で指定した値を、出力します。 493 * @og.rev 3.5.5.5 (2004/04/23) hidden の出力に、XHTMLTag.hidden を使用します。 494 * @og.rev 3.8.0.8 (2005/10/03) gamenId が指定されている場合は、BACK_GAMENID を出力する。 495 * @og.rev 5.2.2.0 (2010/11/01) columnWritable,noWritable 属性の追加 496 * @og.rev 6.2.4.0 (2015/05/15) submitタグ毎に飛ばし先を変える為、GAMENIDをボタン単位に出力する。 497 * @og.rev 6.3.9.0 (2015/11/06) コンストラクタで初期化されていないフィールドを null チェックなしで利用している(findbugs) 498 * 499 * @param command コマンド 500 * @param lbl ラベルID 501 * @param valueLink 飛び先URL 502 * 503 * @return 隠し属性タグ 504 * @og.rtnNotNull 505 */ 506 private String getHiddenTag( final String command, final String lbl, final String valueLink ) { 507 508 final String prefix = HybsSystem.NO_XFER_KEY + lbl ; 509 510 final StringBuilder strRet = new StringBuilder( BUFFER_MIDDLE ) 511 .append( XHTMLTag.hidden( prefix ,valueLink ) ) // 3.5.5.5 (2004/04/23) 512 .append( XHTMLTag.hidden( prefix + "CMD",command ) ); // 3.5.5.5 (2004/04/23) 513 514 // 3.5.5.5 (2004/04/23) keys,vals 属性で指定した値を、出力します。 515 // 6.3.9.0 (2015/11/06) コンストラクタで初期化されていないフィールドを null チェックなしで利用している(findbugs) 516 if( keys != null && vals != null ) { 517 if( keys.length != vals.length ) { 518 final String errMsg = "SubmitTag の keys と vals の引数の個数が異なります。" + CR 519 + "keys=[" + StringUtil.array2csv( keys ) + "], vals=[" 520 + StringUtil.array2csv( vals ) + "]" ; 521 throw new HybsSystemException( errMsg ); 522 } 523 for( int i=0; i<keys.length; i++ ) { 524 strRet.append( XHTMLTag.hidden( prefix + "KEY_" + keys[i],vals[i] ) ); // 3.5.5.5 (2004/04/23) 525 } 526 } 527 528 // 4.0.0 (2007/05/23) dbkeys が指定されている場合 529 if( dbkeys != null && dbkeys.length() > 0 ) { 530 strRet.append( XHTMLTag.hidden( prefix + "KEY_dbkeys",dbkeys ) ); // 4.0.0 (2007/05/23) 531 } 532 533 // 3.8.0.8 (2005/10/03) gamenId が指定されている場合は、BACK_GAMENID を出力する。 534 // 6.2.4.0 (2015/05/15) submitタグ毎に飛ばし先を変える為、GAMENIDをボタン単位に出力する。 535 // GAMENID は、writeChectタグで hidden で出しているが、commonForward が hidden を拾えなかったため、問題なかった。 536 if( gamenId != null && gamenId.length() > 0 ) { 537 final String backGamenId = getGUIInfoAttri( "KEY" ); 538 strRet.append( XHTMLTag.hidden( prefix + "KEY_GAMENID" ,gamenId ) ) // 6.2.4.0 (2015/05/15) 539 .append( XHTMLTag.hidden( prefix + "KEY_BACK_GAMENID",backGamenId ) ); 540 } 541 542 // 5.2.2.0 (2010/11/01) columnWritable,noWritable 属性の追加 543 if( columnWritable != null ) { 544 strRet.append( XHTMLTag.hidden( prefix + "KEY_columnWritable",columnWritable ) ); 545 } 546 if( noWritable != null ) { 547 strRet.append( XHTMLTag.hidden( prefix + "KEY_noWritable" ,noWritable ) ); 548 } 549 550 return strRet.toString(); 551 } 552 553 /** 554 * 【TAG】処理コマンドを登録します(初期値:大文字の value 属性値[INSERT,COPY,MODIFY,DELETE など])。 555 * 556 * @og.tag 557 * command 属性を指定しない場合は、このvalue 属性値が、コマンドになります。 558 * value 属性に、insert,copy,modify,delete などと指定されていた場合は、 559 * それぞれ、INSERT,COPY,MODIFY,DELETE というコマンドになります。 560 * コマンドは、大文字です。 561 * 562 * @param cmd コマンド 563 */ 564 public void setCommand( final String cmd ) { 565 command = nval( getRequestParameter( cmd ),command ); 566 if( command != null ) { command = command.toUpperCase(Locale.JAPAN); } 567 } 568 569 /** 570 * 【TAG】サブミット先の文書を表示させるフレーム、またはウィンドウの名前を指定します。 571 * 572 * @og.tag サブミット先のフレーム名(ターゲット属性)を設定します。 573 * 574 * @og.rev 3.5.5.2 (2004/04/02) 新規追加 575 * 576 * @param name サブミット先の文書のフレーム名(ターゲット属性) 577 */ 578 public void setTarget( final String name ) { 579 target = nval( getRequestParameter( name ),target ); 580 } 581 582 /** 583 * 【TAG】ボタン専用のリクエストキーをCSV形式で複数指定します。 584 * 585 * @og.tag 586 * このサブミットボタンが押された場合のみ、転送されるリクエスト情報の 587 * キーを設定できます。CSV形式で複数指定できます。 588 * vals 属性には、キーに対応する値を、設定してください。 589 * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 590 * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。 591 * 592 * @og.rev 3.5.5.5 (2004/04/23) 新規追加 593 * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用 594 * 595 * @param key ボタンが押された時に転送するキー 596 */ 597 public void setKeys( final String key ) { 598 keys = getCSVParameter( key ); 599 } 600 601 /** 602 * 【TAG】ボタン専用のリクエスト値をCSV形式で複数指定します。 603 * 604 * @og.tag 605 * キーに対応した値を、CSV形式で複数指定出来ます。 606 * 指定順序は、キーと同じにしておいて下さい。 607 * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 608 * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。 609 * 610 * @og.rev 3.5.5.5 (2004/04/23) 新規追加 611 * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用 612 * 613 * @param val keys属性に対応する値 614 */ 615 public void setVals( final String val ) { 616 vals = getCSVParameter( val ); 617 } 618 619 /** 620 * 【TAG】commonForward の dbkeys にカラム指定を行います。 621 * 622 * @og.tag 623 * カラム指定は、CSV形式(CSV形式)で指定してください。 624 * なお、引数は、自動的に受けるのではなく、commonForward タグに、 625 * dbkeys="{@dbkeys}" の記述は必要です。 626 * 627 * @og.rev 4.0.0.0 (2007/05/23) 新規追加 628 * 629 * @param keys dbkeysのカラム指定 630 */ 631 public void setDbkeys( final String keys ) { 632 dbkeys = nval( getRequestParameter( keys ),dbkeys ); 633 } 634 635 /** 636 * 【TAG】書き込み可能カラム名を、CSV形式で与えます。 637 * 638 * @og.tag 639 * これは、書き込み不可カラム名の指定(noWritable)と同時にセットする 640 * ことは出来ません。 641 * なお、カラム名の代わりに、"null" を指定すると、なにも指定しないこと 642 * になります。つまり、noWritable にすべてのカラムを指定することと 643 * 同じになります。(デフォルトなので、あまり意味はありません。) 644 * "*" を指定すると、すべてのカラムを(columnWritable)指定したことになります。 645 * 646 * @og.rev 5.2.2.0 (2010/11/01) 新規追加 647 * 648 * @param columnName 書込可能カラム名(CSV形式) (例:"OYA,KO,HJO,SU,DYSET,DYUPD") 649 * @see #setNoWritable( String ) 650 */ 651 public void setColumnWritable( final String columnName ) { 652 columnWritable = nval( getRequestParameter(columnName),null ); 653 } 654 655 /** 656 * 【TAG】書き込み不可カラム名を、CSV形式で与えます。 657 * 658 * @og.tag 659 * これは、書き込み可能カラム名の指定(columnWritable)と同時にセットする 660 * ことは出来ません。 661 * なお、カラム名の代わりに、"null" を指定すると、なにも指定しないこと 662 * になります。つまり、columnWritable にすべてのカラムを指定することと 663 * 同じになります。 664 * "*" を指定すると、すべてのカラムを(noWritable)指定したことになります。 665 * 666 * @og.rev 5.2.2.0 (2010/11/01) 新規追加 667 * 668 * @param columnName 書込不可カラム名(CSV形式) (例:"OYA,KO,HJO,SU,DYSET,DYUPD") 669 * @see #setColumnWritable( String ) 670 */ 671 public void setNoWritable( final String columnName ) { 672 noWritable = nval( getRequestParameter(columnName),null ); 673 } 674 675 /** 676 * 【TAG】画像ボタンを作る場合の、画像ファイルを指定します。 677 * 678 * @og.tag 679 * 画像ボタン作成支援の属性です。 680 * inputタグでtype=imageにした場合、IEではname,valueのセットが 681 * 次の画面に渡されない仕様になっているためエンジンのsubmitでは 682 * 利用できません。(どのボタンが押されたか分からない) 683 * そこで、typeはsubmitのままcssの背景画像としてここで指定した 684 * 画像を配置します。 685 * 内部的にはbackground: url(imgFile) center center no-repeat; 686 * をstyleタグに書く事と同じです。 687 * 高さ、幅は把握できないため、別途style属性でhight,widthを指定して下さい。 688 * 689 * 6.2.4.2 (2015/05/29) 690 * 画像の配置を、left top から、center center に変更します。 691 * スタイル属性追加時は、一番初めにします。そうすることで、style属性で、これらの 692 * 設定を上書きできるようになります。 693 * 694 * @og.rev 5.5.0.0 (2012/03/01) 新規追加 695 * 696 * @param image ボタンの背景画像 697 */ 698 public void setImg( final String image ) { 699 bgImg = nval( getRequestParameter(image),null ); 700 } 701 702 /** 703 * このオブジェクトの文字列表現を返します。 704 * 基本的にデバッグ目的に使用します。 705 * 706 * @return このクラスの文字列表現 707 * @og.rtnNotNull 708 */ 709 @Override 710 public String toString() { 711 return ToString.title( this.getClass().getName() ) 712 .println( "VERSION" ,VERSION ) 713 .println( "command" ,command ) 714 .println( "value" ,value ) 715 .println( "gamenId" ,gamenId ) 716 .println( "target" ,target ) 717 .println( "keys" ,keys ) 718 .println( "vals" ,vals ) 719 .println( "Other..." ,getAttributes().getAttribute() ) 720 .fixForm().toString() ; 721 } 722}