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