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 ) { 294 if( accesskey != null && ! accesskey.isEmpty() ) { // 5.6.0.3 (2012/01/24) 295 lbl = lbl + "(" + accesskey + ")" ; 296 } 297 298 // キャッシュエントリ 299 command = nval( command,value.toUpperCase(Locale.JAPAN) ); 300 String valueLink = getValueLink( gamenId , value ); 301 if( valueLink == null ) { return ""; } // アクセス不可時は null 302 303 // 3.3.1.1 (2003/07/03) ForwardManager クラスの廃止。飛び先のキャッシュを廃止します。 304 rtn.append( getHiddenTag( command, lbl, valueLink ) ); 305 rtn.append( HybsSystem.CR ); 306 307 set( "type",TYPE ); 308 set( "name",NAME ); 309 set( "value",lbl ); 310 311 // 3.5.5.2 (2004/04/02) target 属性の追加 312 if( target != null ) { 313 add( "onClick","this.form.target='" + target + "'",";" ); // 3.5.5.9 (2004/06/07) 314 } 315 316 // 4.0.0 (2005/11/30) title 属性が未設定時の処理追加 317 if( get( "title" ) == null ) { 318 LabelInterface msglbl = getLabelInterface(); 319 if( msglbl != null ) { 320 String desc = msglbl.getDescription(); 321 if( desc != null && desc.length() > 0 ) { 322 set( "title",desc ); 323 } 324 } 325 } 326 327 // 5.5.0.0 Img対応 スタイル属性に追加する。 328 if( bgImg != null && bgImg.length() > 0 ){ 329 add("style",IMG_PRE+bgImg+IMG_SUF); 330 } 331 332 rtn.append( XHTMLTag.input( getAttributes() ) ); 333 rtn.append( MARGIN ); 334 rtn.append( HybsSystem.CR ); 335 336 return rtn.toString() ; 337 } 338 339 /** 340 * 画面IDとvalue から、指定のURLを作成します。 341 * 画面へのアクセス許可が与えられていない場合は、null を返します。 342 * 343 * @og.rev 3.5.5.0 (2004/03/12) URLを求めるのに、GUIInfo#getRealAddress() を使用する。 344 * @og.rev 4.0.0.0 (2005/01/31) GUIInfoの実アドレスのパラメータを考慮する。 345 * 346 * @param gamenId 画面ID 347 * @param value 飛ばし先(XXXX.jspのXXXX部分) 348 * 349 * @return URL文字列(アクセス不可時は null) 350 */ 351 private String getValueLink( final String gamenId,final String value ) { 352 String link = value + ".jsp"; 353 354 if( gamenId != null && gamenId.length() > 0 ) { 355 GUIInfo guiInfo = getGUIInfo( gamenId ); // 4.0.0 (2005/01/31) 356 if( guiInfo == null ) { return null; } // 見つからない場合は、アクセス不可 357 358 String address = guiInfo.getRealAddress( link ); 359 link = getRequestParameter( address ); 360 } 361 362 return link ; 363 } 364 365 /** 366 * 【TAG】アクション(INSERT,COPY,MODIFY,DELETE,ENTRY,RESET)を指定します。 367 * 368 * @og.tag 369 * Ver5 になって、update.jsp ですべての処理を行う方向で開発するに当たり、 370 * command と lbl を記述する必要がでてきました。 371 * そこで、現在最新版では、action 属性を用意し、command を記述するだけで良くなりました。 372 * 373 * [action属性] [初期設定されるパラメータ郡] 374 * INSERT value="update" command="INSERT" lbl="INSERT" accesskey="I" 375 * COPY value="update" command="COPY" lbl="COPY" accesskey="C" 376 * MODIFY value="update" command="MODIFY" lbl="MODIFY" accesskey="M" 377 * DELETE value="update" command="DELETE" lbl="DELETE" accesskey="Z" 378 * ENTRY value="entry" command="ENTRY" lbl="ENTRY" accesskey="E" 379 * RESET value="reset" command="RESET" lbl="ENTRY" accesskey="R" 380 * 381 * @og.rev 5.2.2.0 (2010/11/01) 新規追加 382 * 383 * @param act アクション文字列 384 * @see <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.SubmitTag.ACT_COPY">アクション定数</a> 385 */ 386 public void setAction( final String act ) { 387 action = getRequestParameter( act ); 388 389 if( ! check( action, ACTION_LIST ) ) { 390 391 StringBuilder errMsg = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 392 errMsg.append( "指定のアクションは実行できません。アクションエラー" ); 393 errMsg.append( HybsSystem.CR ); 394 errMsg.append( "action=[" ).append( action ).append( "] " ); 395 errMsg.append( HybsSystem.CR ); 396 397 for( int i=0; i<ACTION_LIST.length; i++ ) { 398 errMsg.append( " | " ); 399 errMsg.append( ACTION_LIST[i] ); 400 } 401 errMsg.append( " | " ); 402 throw new HybsSystemException( errMsg.toString() ); 403 } 404 } 405 406 /** 407 * 【TAG】forward したいJSPファイル名を記述します(例:insert,copy,modify,delete など)。 408 * 409 * @og.tag 410 * JSPファイル名は、標準で、insert,copy,modify,delete などと指定します。 411 * 実際には、各JSP画面(insert.jsp,copy.jsp,modify.jsp,delete.jsp )に 412 * リクエストが転送されます。 413 * このJSPファイル名は、同一画面ID内のフォルダに属している必要があります。 414 * ここのIDは、JSP画面そのものですので、大文字小文字は区別されます。 415 * 416 * @param val JSPファイル名(insert,copy,modify,delete など) 417 */ 418 public void setValue( final String val ) { 419 value = nval( getRequestParameter( val ),value ); 420 if( value == null ) { 421 String errMsg = "value に null がセットされています。"; 422 throw new HybsSystemException( errMsg ); 423 } 424 } 425 426 /** 427 * 【TAG】gamenId 属性を登録します。 428 * 429 * @og.tag 430 * gamenId 属性は、別の画面にforward する場合に使用します。 431 * 実際は、forward ではなく、sendRedirect されます。 432 * 433 * @param id gamenId 属性 434 */ 435 public void setGamenId( final String id ) { 436 gamenId = nval( getRequestParameter( id ),gamenId ); 437 } 438 439 /** 440 * 隠し属性タグを取得します。 441 * 各ボタンに設定された値を、隠しフィールドに設定して受け渡しします。 442 * 443 * @og.rev 3.3.1.1 (2003/07/03) ForwardManager クラスの廃止。飛び先のキャッシュを廃止します。 444 * @og.rev 3.5.5.5 (2004/04/23) 余計なボタン関連情報を転送しない為に、キーを変更します。 445 * @og.rev 3.5.5.5 (2004/04/23) keys,vals 属性で指定した値を、出力します。 446 * @og.rev 3.5.5.5 (2004/04/23) hidden の出力に、XHTMLTag.hidden を使用します。 447 * @og.rev 3.8.0.8 (2005/10/03) gamenId が指定されている場合は、BACK_GAMENID を出力する。 448 * @og.rev 5.2.2.0 (2010/11/01) columnWritable,noWritable 属性の追加 449 * 450 * @param command コマンド 451 * @param lbl ラベルID 452 * @param valueLink 飛び先URL 453 * 454 * @return 隠し属性タグ 455 */ 456 private String getHiddenTag( final String command, final String lbl, final String valueLink ) { 457 458 StringBuilder strRet = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 459 460 String prefix = HybsSystem.NO_XFER_KEY + lbl ; 461 strRet.append( XHTMLTag.hidden( prefix ,valueLink ) ); // 3.5.5.5 (2004/04/23) 462 strRet.append( XHTMLTag.hidden( prefix + "CMD",command ) ); // 3.5.5.5 (2004/04/23) 463 464 // 3.5.5.5 (2004/04/23) keys,vals 属性で指定した値を、出力します。 465 if( keys != null ) { 466 if( keys.length != vals.length ) { 467 String errMsg = "SubmitTag の keys と vals の引数の個数が異なります。" + HybsSystem.CR 468 + "keys=[" + StringUtil.array2csv( keys ) + "], vals=[" 469 + StringUtil.array2csv( vals ) + "]" ; 470 throw new HybsSystemException( errMsg ); 471 } 472 for( int i=0; i<keys.length; i++ ) { 473 strRet.append( XHTMLTag.hidden( prefix + "KEY_" + keys[i],vals[i] ) ); // 3.5.5.5 (2004/04/23) 474 } 475 } 476 477 // 4.0.0 (2007/05/23) dbkeys が指定されている場合 478 if( dbkeys != null && dbkeys.length() > 0 ) { 479 strRet.append( XHTMLTag.hidden( prefix + "KEY_dbkeys",dbkeys ) ); // 4.0.0 (2007/05/23) 480 } 481 482 // 3.8.0.8 (2005/10/03) gamenId が指定されている場合は、BACK_GAMENID を出力する。 483 if( gamenId != null && gamenId.length() > 0 ) { 484 String backGamenId = getGUIInfoAttri( "KEY" ); 485 strRet.append( XHTMLTag.hidden( prefix + "KEY_BACK_GAMENID",backGamenId ) ); 486 } 487 488 // 5.2.2.0 (2010/11/01) columnWritable,noWritable 属性の追加 489 if( columnWritable != null ) { 490 strRet.append( XHTMLTag.hidden( prefix + "KEY_columnWritable",columnWritable ) ); 491 } 492 if( noWritable != null ) { 493 strRet.append( XHTMLTag.hidden( prefix + "KEY_noWritable",noWritable ) ); 494 } 495 496 return strRet.toString(); 497 } 498 499 /** 500 * 【TAG】処理コマンドを登録します(初期値:大文字の value 属性値[INSERT,COPY,MODIFY,DELETE など])。 501 * 502 * @og.tag 503 * command 属性を指定しない場合は、このvalue 属性値が、コマンドになります。 504 * value 属性に、insert,copy,modify,delete などと指定されていた場合は、 505 * それぞれ、INSERT,COPY,MODIFY,DELETE というコマンドになります。 506 * コマンドは、大文字です。 507 * 508 * @param cmd コマンド 509 */ 510 public void setCommand( final String cmd ) { 511 command = nval( getRequestParameter( cmd ),command ); 512 if( command != null ) { command = command.toUpperCase(Locale.JAPAN); } 513 } 514 515 /** 516 * 【TAG】サブミット先の文書を表示させるフレーム、またはウィンドウの名前を指定します。 517 * 518 * @og.tag サブミット先のフレーム名(ターゲット属性)を設定します。 519 * 520 * @og.rev 3.5.5.2 (2004/04/02) 新規追加 521 * 522 * @param flag サブミット先の文書のフレーム名(ターゲット属性) 523 */ 524 public void setTarget( final String flag ) { 525 target = nval( getRequestParameter( flag ),target ); 526 } 527 528 /** 529 * 【TAG】ボタン専用のリクエストキーをCSV形式で複数指定します。 530 * 531 * @og.tag 532 * このサブミットボタンが押された場合のみ、転送されるリクエスト情報の 533 * キーを設定できます。カンマ区切りで複数指定できます。 534 * vals 属性には、キーに対応する値を、設定してください。 535 * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 536 * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。 537 * 538 * @og.rev 3.5.5.5 (2004/04/23) 新規追加 539 * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用 540 * 541 * @param key ボタンが押された時に転送するキー 542 */ 543 public void setKeys( final String key ) { 544 keys = getCSVParameter( key ); 545 } 546 547 /** 548 * 【TAG】ボタン専用のリクエスト値をCSV形式で複数指定します。 549 * 550 * @og.tag 551 * キーに対応した値を、カンマ区切り文字で複数指定出来ます。 552 * 指定順序は、キーと同じにしておいて下さい。 553 * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 554 * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。 555 * 556 * @og.rev 3.5.5.5 (2004/04/23) 新規追加 557 * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用 558 * 559 * @param val keys属性に対応する値 560 */ 561 public void setVals( final String val ) { 562 vals = getCSVParameter( val ); 563 } 564 565 /** 566 * 【TAG】commonForward の dbkeys にカラム指定を行います。 567 * 568 * @og.tag 569 * カラム指定は、CSV形式(カンマ区切り)で指定してください。 570 * なお、引数は、自動的に受けるのではなく、commonForward タグに、 571 * dbkeys="{@dbkeys}" の記述は必要です。 572 * 573 * @og.rev 4.0.0.0 (2007/05/23) 新規追加 574 * 575 * @param keys dbkeys のにカラム指定 576 */ 577 public void setDbkeys( final String keys ) { 578 dbkeys = nval( getRequestParameter( keys ),dbkeys ); 579 } 580 581 /** 582 * 【TAG】書き込み可能カラム名を、カンマ区切りで与えます。 583 * 584 * @og.tag 585 * これは、書き込み不可カラム名の指定(noWritable)と同時にセットする 586 * ことは出来ません。 587 * なお、カラム名の代わりに、"null" を指定すると、なにも指定しないこと 588 * になります。つまり、noWritable にすべてのカラムを指定することと 589 * 同じになります。(デフォルトなので、あまり意味はありません。) 590 * "*" を指定すると、すべてのカラムを(columnWritable)指定したことになります。 591 * 592 * @og.rev 5.2.2.0 (2010/11/01) 新規追加 593 * 594 * @param columnName 例:"OYA,KO,HJO,SU,DYSET,DYUPD" 595 * @see #setNoWritable( String ) 596 */ 597 public void setColumnWritable( final String columnName ) { 598 columnWritable = nval( getRequestParameter(columnName),null ); 599 } 600 601 /** 602 * 【TAG】書き込み不可カラム名を、カンマ区切りで与えます。 603 * 604 * @og.tag 605 * これは、書き込み可能カラム名の指定(columnWritable)と同時にセットする 606 * ことは出来ません。 607 * なお、カラム名の代わりに、"null" を指定すると、なにも指定しないこと 608 * になります。つまり、columnWritable にすべてのカラムを指定することと 609 * 同じになります。 610 * "*" を指定すると、すべてのカラムを(noWritable)指定したことになります。 611 * 612 * @og.rev 5.2.2.0 (2010/11/01) 新規追加 613 * 614 * @param columnName 例:"OYA,KO,HJO,SU,DYSET,DYUPD" 615 * @see #setColumnWritable( String ) 616 */ 617 public void setNoWritable( final String columnName ) { 618 noWritable = nval( getRequestParameter(columnName),null ); 619 } 620 621 /** 622 * 【TAG】画像ボタンを作る場合の、画像ファイルを指定します。 623 * 624 * @og.tag 625 * 画像ボタン作成支援の属性です。 626 * inputタグでtype=imageにした場合、IEではname,valueのセットが 627 * 次の画面に渡されない仕様になっているためエンジンのsubmitでは 628 * 利用できません。(どのボタンが押されたか分からない) 629 * そこで、typeはsubmitのままcssの背景画像としてここで指定した 630 * 画像を配置します。 631 * 内部的にはbackground: url(imgFile) left top no-repeat; 632 * をstyleタグに書く事と同じです。 633 * 高さ、幅は把握できないため、別途style属性でhight,widthを指定して下さい。 634 * 635 * @og.rev 5.5.0.0 (2012/03/01) 新規追加 636 * 637 * @param image ボタンの背景画像 638 */ 639 public void setImg( final String image ) { 640 bgImg = nval( getRequestParameter(image),null ); 641 } 642 643 /** 644 * このオブジェクトの文字列表現を返します。 645 * 基本的にデバッグ目的に使用します。 646 * 647 * @return このクラスの文字列表現 648 */ 649 @Override 650 public String toString() { 651 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 652 .println( "VERSION" ,VERSION ) 653 .println( "command" ,command ) 654 .println( "value" ,value ) 655 .println( "gamenId" ,gamenId ) 656 .println( "target" ,target ) 657 .println( "keys" ,keys ) 658 .println( "vals" ,vals ) 659 .println( "Other..." ,getAttributes().getAttribute() ) 660 .fixForm().toString() ; 661 } 662}