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