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.fukurou.util.XHTMLTag; 022import org.opengion.fukurou.util.TagBuffer; 023import org.opengion.fukurou.util.StringUtil ; 024 025import static org.opengion.fukurou.util.StringUtil.nval ; 026import org.opengion.fukurou.util.EnumType ; 027 028import java.util.Locale ; 029 030/** 031 * 戻るボタン/戻るリンクを表示するHTML拡張タグです(通常はcustom/query_info.jspに組込み)。 032 * 033 * custom/query_info.jsp に組み込むことで、全てのquery.jspに組込む事ができます。 034 * 戻るボタン/リンクを表示するかどうかの条件判定は、 035 * 条件1:自分自身へ戻る機能はサポートできません。 036 * 条件2:BACK_GAMENID が存在するか、または、gamenId で指示された場合のみ表示。 037 * 条件3:command="NEW" で、キャッシュに設定しておく必要がある。 038 * 039 * @og.formSample 040 * ●形式:<og:backGamen keys="・・・" vals="・・・" > ・・Body・・ </og:backGamen> 041 * ●body:あり(EVAL_BODY_BUFFERED:BODYを評価し、{@XXXX} を解析します) 042 * 043 * ●Tag定義: 044 * <og:backGamen 045 * type 【TAG】ボタンのタイプ[link/button/relLink/relButton/historyBack]を指定します(初期値:link) 046 * command 【TAG】(通常は使いません)戻る時に指定する command を設定できます(初期値:RENEW) 047 * gamenId 【TAG】(通常は使いません)戻り先の画面をセットします(初期値:BACK_GAMENID) 048 * keys 【TAG】リンク先に渡すキーをCSV形式で複数指定します 049 * vals 【TAG】keys属性に対応する値をCSV形式で複数指定します 050 * lbl 【TAG】ラベルリソースのラベルIDを指定します 051 * href 【HTML】リンク先のURLを指定します 052 * target 【HTML】リンク先の表示ターゲットを指定します(初期値:CONTENTS) 053 * id 【HTML】要素に対して固有の名前(id)をつける場合に設定します 054 * lang 【HTML】要素の内容と他の属性値の言語(lang,xml:lang)を指定します 055 * dir 【HTML】文字表記の方向(dir)を指定します 056 * title 【HTML】要素に対する補足的情報(title)を設定します 057 * style 【HTML】この要素に対して適用させるスタイルシート(style)を設定します 058 * tabindex 【HTML】タブの移動順(tabindex)を指定します(0 ~ 32767) 059 * accesskey 【HTML】アクセスキー(alt+キーで直接指定)を割り当てます(初期値:R) 060 * clazz 【HTML】要素に対して class 属性を設定します 061 * language 【TAG】タグ内部で使用する言語コード[ja/en/zh/…]を指定します 062 * onClick 【HTML】JavaScriptのイベント onClick を設定します(例:onClick="renew('query.jsp','QUERY');") 063 * onBlur 【HTML】JavaScriptのイベント onBlur を設定します(例:onBlur="this.value=value.toUpperCase();") 064 * onFocus 【HTML】JavaScriptのイベント onFocus を設定します 065 * ondblClick 【HTML】JavaScriptのイベント ondblClick を設定します 066 * onMouseDown 【HTML】JavaScriptのイベント onMouseDown を設定します 067 * onMouseUp 【HTML】JavaScriptのイベント onMouseUp を設定します 068 * onMouseMove 【HTML】JavaScriptのイベント onMouseMove を設定します 069 * onMouseOut 【HTML】JavaScriptのイベント onMouseOut を設定します 070 * onMouseOver 【HTML】JavaScriptのイベント onMouseOver を設定します 071 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 072 * > ... Body ... 073 * </og:backGamen> 074 * 075 * ●使用例 076 * <og:backGamen keys="displayMsg,clear" vals="MSG0065,true" > 077 * <img src="{@SYS.JSP}/image/back.gif" alt="{@BACK_GAMENID}" /> 078 * <og:message lbl="MSG0049" /> 079 * </og:backGamen> 080 * 081 * @og.rev 3.1.8.0 (2003/05/16) 新規作成 082 * @og.group 画面制御 083 * 084 * @version 4.0 085 * @author Kazuhiko Hasegawa 086 * @since JDK5.0, 087 */ 088public class BackGamenTag extends HTMLTagSupport { 089 /** このプログラムのVERSION文字列を設定します。 {@value} */ 090 private static final String VERSION = "6.9.4.1 (2018/04/09)" ; 091 private static final long serialVersionUID = 694120180409L ; 092 093 // 4.0.0 (2005/05/31) JDK5.0 enum 対応 094 /** 095 * type 属性として指定できる選択肢を定義します。 096 */ 097 private static final EnumType<String> CHECK_TYPE = 098 new EnumType<>( "ボタンのタイプ","link" ) 099 .append( "link" ,"戻るリンクを作成します。" ) 100 .append( "relLink" ,"戻るリンク(相対パス)を作成します。" ) 101 .append( "button" ,"戻るボタンを作成します。" ) 102 .append( "relButton" ,"戻るボタン(相対パス)を作成します。" ) 103 .append( "historyBack" ,"通常のヒストリバックボタンを作成します。" ) ; 104 105 // 6.9.4.1 (2018/04/09) FILEFILTER使用時(紙芝居作成時)に、true になります。 106 private static final boolean USE_FILEFILTER = "true".equalsIgnoreCase( HybsSystem.sys( "USE_FILEFILTER" ) ); // null時は、false 107 108 private String type = CHECK_TYPE.getDefault() ; 109 private String command = "RENEW" ; 110 private String gamenId ; 111 private String target = "CONTENTS"; 112 private String accesskey = "R"; 113 private String[] keys ; 114 private String[] vals ; 115 private String body ; 116 private String backAddress ; // 4.0.1.0 (2007/12/18) 117 118 /** 119 * デフォルトコンストラクター 120 * 121 * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor. 122 */ 123 public BackGamenTag() { super(); } // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。 124 125 /** 126 * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。 127 * 128 * @return 後続処理の指示( EVAL_BODY_BUFFERED ) 129 */ 130 @Override 131 public int doStartTag() { 132 return EVAL_BODY_BUFFERED ; // Body を評価する。( extends BodyTagSupport 時) 133 } 134 135 /** 136 * Taglibのタグ本体を処理する doAfterBody() を オーバーライドします。 137 * 138 * @return 後続処理の指示(SKIP_BODY) 139 */ 140 @Override 141 public int doAfterBody() { 142 body = getBodyString(); 143 144 return SKIP_BODY ; 145 } 146 147 /** 148 * タグリブオブジェクトをリリースします。 149 * 150 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 151 * 152 */ 153 @Override 154 protected void release2() { 155 super.release2(); 156 type = CHECK_TYPE.getDefault() ; 157 command = "RENEW" ; 158 gamenId = null; 159 target = "CONTENTS"; 160 accesskey = "R"; 161 keys = null; 162 vals = null; 163 body = null; 164 backAddress = null; 165 } 166 167 /** 168 * 戻るボタン/戻るリンクを作成します。 169 * 170 * @og.rev 3.1.8.0 (2003/05/16) BACK_GAMENID のキャッシュの取り出し先を変更する。 171 * @og.rev 3.5.4.0 (2003/11/25) 履歴(history)オブジェクトのback() メソッドを利用した戻る機能を追加します。 172 * @og.rev 4.0.1.0 (2007/12/17) BackAddress対応 173 * @og.rev 5.0.2.0 (2009/11/01) 相対パスでの戻るリンク対応 174 * 175 * @return 戻るボタン/戻るリンク 176 */ 177 @Override 178 protected String makeTag() { 179 String rtn = "" ; 180 181 if( gamenId == null ) { 182 gamenId = getBackGamenId() ; 183 } 184 if( backAddress == null) { // 4.0.1.0 (2007/12/17) 185 backAddress = getBackAddress(); 186 } 187 188 // 4.0.0 (2005/05/31) 189 if( "historyBack".equalsIgnoreCase( type ) ) { 190 final String hb = getRequest().getParameter( "historyBack" ); 191 if( "1".equals( hb ) ) { 192 rtn = makeHistoryBackTag(); 193 } 194 } 195 else { 196 if( checkCondition( gamenId ) ) { 197 set( "target" ,nval( get( "target" ), target ) ); 198 199 // 5.0.2.0 (2009/11/01) 相対パスでの戻る対応 200 if( "link".equalsIgnoreCase( type ) || "relLink".equalsIgnoreCase( type ) ) { 201 rtn = makeLinkTag(); 202 } 203 else if( "button".equalsIgnoreCase( type ) || "relButton".equalsIgnoreCase( type ) ) { 204 rtn = makeButtonTag(); // 3.8.1.2 (2005/12/19) 205 } 206 else { 207 final String errMsg = "指定の type は、下記の範囲で指定してください。" 208 + "type=" + type + " : " 209 + CHECK_TYPE.toString(); 210 throw new HybsSystemException( errMsg ); 211 } 212 } 213 } 214 215 return rtn ; 216 } 217 218 /** 219 * 戻るリンクを作成します。 220 * 221 * @og.rev 3.5.5.0 (2004/03/12) 戻るアドレスを、GUIInfoより取得するように変更。 222 * @og.rev 4.0.0.0 (2005/01/31) GUIInfoの実アドレスのパラメータを考慮する。 223 * @og.rev 3.7.0.3 (2005/03/01) 戻る行番号を、BACK_ROW_KEYより取得し、SEL_ROW で渡す。 224 * @og.rev 4.0.1.0 (2007/12/17) 戻るアドレスをbackAddressを使うように変更 225 * @og.rev 4.0.2.1 (2007/12/27) リクエスト部からGAMENIDを外していたが、二段階戻る場合に不具合が出たため元に戻す 226 * @og.rev 5.0.2.0 (2009/11/01) 相対パスでの戻るリンク対応 227 * @og.rev 6.9.4.1 (2018/04/09) FILEFILTER使用時(紙芝居作成時)は、相対リンクを出力するようにします。 228 * 229 * @return 戻るリンク 230 * @og.rtnNotNull 231 */ 232 private String makeLinkTag() { 233 set( "body",getMsglbl( gamenId ) ); 234 String href = get( "href" ); 235 if( href == null) { 236 // 3.5.5.0 (2004/03/12) 237 // 5.0.2.0 (2009/11/01) 相対パスでの戻る対応 238// if( backAddress == null || "relLink".equalsIgnoreCase( type ) ) { // 4.0.1.0 (2007/12/17) if文追加 239 if( backAddress == null || "relLink".equalsIgnoreCase( type ) || USE_FILEFILTER ) { // 6.9.4.1 (2018/04/09) FILEFILTER使用時は、相対リンクを出力 240 final GUIInfo guiInfo = getGUIInfo( gamenId ); // 4.0.0 (2005/01/31) 241 if( guiInfo == null ) { return ""; } // 見つからない場合は、アクセス不可 242 final String address = guiInfo.getRealAddress( "index.jsp" ); 243 href = getRequestParameter( address ); 244 } 245 else { // 4.0.1.0 (2007/12/17) 246 href = backAddress; 247 } 248 } 249 250 // 3.7.0.3 (2005/03/01) 戻る行番号を、BACK_ROW_KEYより取得し、SEL_ROW で渡す。 251 final String rowkey = HybsSystem.BACK_ROW_KEY + getGUIInfoAttri( "KEY" ); 252 final String rowVal = (String)getSessionAttribute( rowkey ); 253 254 final String[] keys2 = new String[] { "command","GAMENID","SEL_ROW" }; 255 final String[] vals2 = new String[] { command , gamenId , rowVal }; 256 final String urlEnc2 = XHTMLTag.urlEncode( keys2,vals2 ); 257 href = XHTMLTag.addUrlEncode( href,urlEnc2 ); 258 259 final String urlEnc = XHTMLTag.urlEncode( keys,vals ); 260 href = XHTMLTag.addUrlEncode( href,urlEnc ); 261 262 set( "href",href ); 263 264 return XHTMLTag.link( getAttributes() ) ; 265 } 266 267 /** 268 * 戻るボタンのフォームを作成します。 269 * 270 * @og.rev 3.5.5.0 (2004/03/12) 戻るアドレスを、GUIInfoより取得するように変更。 271 * @og.rev 3.5.5.5 (2004/04/23) hidden の出力に、XHTMLTag.hidden を使用します。 272 * @og.rev 3.8.1.2 (2005/12/19) メソッド名変更、inputタグ⇒buttonタグ変更 273 * @og.rev 4.0.1.0 (2007/12/17) BACK_ADDRESS対応 274 * @og.rev 5.0.2.0 (2009/11/01) 相対パスでの戻るリンク対応 275 * @og.rev 6.3.9.0 (2015/11/06) コンストラクタで初期化されていないフィールドを null チェックなしで利用している(findbugs) 276 * @og.rev 6.9.4.1 (2018/04/09) FILEFILTER使用時(紙芝居作成時)は、相対リンクを出力するようにします。 277 * 278 * @return 戻るボタンのフォーム 279 * @og.rtnNotNull 280 */ 281 private String makeButtonTag() { 282 283 final String href = get( "href" ); 284 if( href == null ) { 285 // 3.5.5.0 (2004/03/12) 286 // 5.0.2.0 (2009/11/01) 相対パスでの戻る対応 287// if( backAddress == null || "relButton".equalsIgnoreCase( type ) ) { // 4.0.1.0 (2007/12/18) if文化 288 if( backAddress == null || "relButton".equalsIgnoreCase( type ) || USE_FILEFILTER ) { // 6.9.4.1 (2018/04/09) FILEFILTER使用時は、相対リンクを出力 289 final GUIInfo guiInfo = getGUIInfo( gamenId ); 290 final String address = guiInfo.getRealAddress(); 291 set( "action", address + "index.jsp" ); 292 } 293 else { 294 set( "action", backAddress ); // 4.0.1.0 (2007/12/18) 295 } 296 } 297 else { 298 set( "action",href ) ; 299 } 300 301 // 6.1.1.0 (2015/01/17) TagBufferの連結記述 302 final String tag = new TagBuffer( "button" ) 303 .add( "type" ,"submit" ) 304 .add( "accesskey" ,get( "accesskey" ) ) 305 .addBody( getMsglbl( gamenId ) ) 306 .makeTag(); 307 308 final StringBuilder body = new StringBuilder( BUFFER_MIDDLE ) 309 .append( tag ) // 6.1.1.0 (2015/01/17) 310 .append( CR ) 311 // command を hidden で作成します。 312 .append( XHTMLTag.hidden( "command",command ) ) // hidden(name,value); 313 .append( CR ) 314 // GAMENID を hidden で作成します。 315 .append( XHTMLTag.hidden( "GAMENID",gamenId ) ) // hidden(name,value); 316 .append( CR ); 317 318 // keys,vals を hidden で作成します。 319 // 6.3.9.0 (2015/11/06) コンストラクタで初期化されていないフィールドを null チェックなしで利用している(findbugs) 320 if( keys != null && vals != null ) { 321 if( keys.length != vals.length ) { 322 final String errMsg = "キーとバリューの個数が異なります。" 323 + CR 324 + " keys.length=[" + keys.length + "] vals.length=[" + vals.length + "]" 325 + " keys=" + StringUtil.array2csv( keys ) + CR 326 + " vals=" + StringUtil.array2csv( vals ) ; // 5.1.8.0 (2010/07/01) errMsg 修正 327 throw new HybsSystemException( errMsg ); 328 } 329 330 for( int i=0; i<keys.length; i++ ) { 331 body.append( XHTMLTag.hidden( keys[i],vals[i] ) ) // hidden(name,value); 332 .append( CR ); 333 } 334 } 335 336 // 3.7.0.3 (2005/03/01) 戻る行番号を、BACK_ROW_KEYより取得し、SEL_ROW で渡す。 337 final String rowkey = HybsSystem.BACK_ROW_KEY + getGUIInfo( "GUI.KEY" ); 338 final String rowVal = (String)getSessionAttribute( rowkey ); 339 // 3.7.0.5 (2005/04/11) null の時は、返さないように変更 340 if( rowVal != null ) { 341 body.append( XHTMLTag.hidden( "SEL_ROW",rowVal ) ) // hidden(name,value); 342 .append( CR ); 343 } 344 345 set( "body",body.toString() ); 346 347 return XHTMLTag.form( getAttributes() ) ; 348 } 349 350 /** 351 * 戻るリンク(historyBack)を作成します。 352 * 353 * @og.rev 3.5.4.0 (2003/11/25) 履歴(history)オブジェクトのback() メソッドを利用した戻る機能を追加します。 354 * 355 * @return 戻るリンク 356 * @og.rtnNotNull 357 */ 358 private String makeHistoryBackTag() { 359 final StringBuilder link = new StringBuilder( BUFFER_MIDDLE ) 360 .append( "<a onClick=\"history.back()\">" ) 361 .append( getMsglbl( gamenId ) ) 362 .append( "</a>" ); 363 364 return link.toString() ; 365 } 366 367 /** 368 * BACK_GAMENID の値を取り出します。 369 * 370 * 値は、キャッシュではなく、session より HybsSystem.BACK_GAMENID_KEY をキーに 371 * 取り出します。 372 * 373 * @og.rev 3.1.8.0 (2003/05/16) BACK_GAMENID のキャッシュの取り出し先を変更する。 374 * 375 * @return BACK_GAMENID の値 376 */ 377 private String getBackGamenId() { 378 final String key = HybsSystem.BACK_GAMENID_KEY + getGUIInfoAttri( "KEY" ); // 4.0.0 (2005/01/31) 379 return (String)getSessionAttribute( key ); 380 } 381 382 /** 383 * BACK_ADDRESS の値を取り出します。 384 * 385 * 値は、キャッシュではなく、session より HybsSystem.BACK_ADDRESS_KEY をキーに 386 * 取り出します。 387 * 388 * @og.rev 4.0.1.0 (2007/12/17) メソッド追加 389 * 390 * @return BACK_GAMENID の値 391 */ 392 private String getBackAddress() { 393 final String key = HybsSystem.BACK_ADDRESS_KEY + getGUIInfoAttri( "KEY" ); // 4.0.0 (2005/01/31) 394 return (String)getSessionAttribute( key ); 395 } 396 397 /** 398 * 【TAG】ボタンのタイプ[link/button/relLink/relButton/historyBack]を指定します(初期値:link)。 399 * 400 * @og.tag 401 * button と設定すると、戻るボタンに、link と設定すると、戻るリンクになります。 402 * historyBack は、IE等の戻る操作と同じで、JavaScriptのヒストリーバックを行います。 403 * また、relButton、relLinkとすると、それぞれ相対パス(画面IDから飛び先のアドレスを元に生成) 404 * で戻り先のアドレスが生成されます。 405 * 初期値は、戻るリンク(link)です。 406 * ※ 6.9.4.1 (2018/04/09) FILEFILTER使用時(紙芝居作成時)は、相対リンクを出力します。 407 * 408 * <table border="1" frame="box" rules="all" > 409 * <caption>ボタンのタイプ説明</caption> 410 * <tr><th>タイプ </th><th>説明 </th></tr> 411 * <tr><td>link </td><td>戻るリンク </td></tr> 412 * <tr><td>button </td><td>戻るボタン </td></tr> 413 * <tr><td>relLink </td><td>戻るリンク(相対パス) </td></tr> 414 * <tr><td>relButton </td><td>戻るボタン(相対パス) </td></tr> 415 * <tr><td>historyBack</td><td>通常のヒストリバックボタン </td></tr> 416 * </table> 417 * 418 * @og.rev 5.0.2.0 (2009/11/01) 相対パスでの戻るリンク対応 419 * 420 * @param tp ボタンのタイプ [link/button/relLink/relButton/historyBack] 421 */ 422 public void setType( final String tp ) { 423 type = CHECK_TYPE.nval( tp ); 424 } 425 426 /** 427 * 【TAG】(通常は使いません)戻る時に指定する command を設定できます(初期値:RENEW)。 428 * 429 * @og.tag 430 * 通常は、RENEW で戻ります。 431 * (初期値は、RENEW なので設定不要です。) 432 * 433 * @param cmd コマンド 434 */ 435 public void setCommand( final String cmd ) { 436 command = nval( getRequestParameter( cmd ),command ); 437 if( command != null ) { command = command.toUpperCase(Locale.JAPAN); } 438 } 439 440 /** 441 * 【TAG】(通常は使いません)戻り先の画面をセットします(初期値:BACK_GAMENID)。 442 * 443 * @og.tag 444 * 通常は、自動的に、BACK_GAMENID の値がセットされますが、 445 * 先祖に戻る(画面A⇒画面B⇒画面C のときに、画面Aに戻る)場合や、 446 * 別の画面に、進む場合に、直接指定します。 447 * (初期値は、来た画面:BACK_GAMENID ですので、設定不要です。) 448 * 値は、キャッシュではなく、session より HybsSystem.BACK_GAMENID_KEY をキーに 449 * 取り出します。 450 * これは、command="NEW" で、BACK_GAMENID リクエストが存在し、BACK_GAMENID と 451 * 自分自身の画面IDが異なる場合のみ、RequestCacheTag#backGamenIdSet メソッドで 452 * session に登録されます。 453 * 454 * @param id 戻り先の画面ID 455 */ 456 public void setGamenId( final String id ) { 457 gamenId = nval( getRequestParameter( id ),gamenId ); 458 } 459 460 /** 461 * 【TAG】リンク先に渡すキーをCSV形式で複数指定します。 462 * 463 * @og.tag 464 * 戻る時に、検索時のキャッシュに指定した引数以外に指定したり、別の値に置き換えたり 465 * する場合のキーを設定できます。CSV形式で複数指定できます。 466 * vals 属性には、キーに対応する値を、設定してください。 467 * 例:<b>keys="displayMsg,clear"</b> vals="MSG0065,true" 468 * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 469 * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。 470 * 471 * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用 472 * 473 * @param key リンク先に渡すキー (例:keys="displayMsg,clear") 474 * @see #setVals( String ) 475 */ 476 public void setKeys( final String key ) { 477 keys = getCSVParameter( key ); 478 } 479 480 /** 481 * 【TAG】keys属性に対応する値をCSV形式で複数指定します。 482 * 483 * @og.tag 484 * キーに設定した値を、CSV形式で複数して出来ます。 485 * 指定順序は、キーと同じにしておいて下さい。 486 * 例:keys="displayMsg,clear" <b>vals="MSG0065,true"</b> 487 * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 488 * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。 489 * 490 * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用 491 * 492 * @param val keys属性に対応する値 (例:vals="MSG0065,true") 493 * @see #setKeys( String ) 494 */ 495 public void setVals( final String val ) { 496 vals = getCSVParameter( val ); 497 } 498 499 /** 500 * 【HTML】リンク先の表示ターゲットを指定します(初期値:CONTENTS)。 501 * 502 * @og.tag 503 * リンク先の文書を表示させるフレーム、またはウィンドウの名前を指定します。 504 * 505 * @param tgt リンク先の表示ターゲット 506 */ 507 public void setTarget( final String tgt ) { 508 set( "target",getRequestParameter( tgt ) ); 509 } 510 511 /** 512 * 【HTML】リンク先のURLを指定します。 513 * 514 * @og.tag リンク先のURLを指定します。 515 * 516 * @param href リンク先のURL 517 */ 518 public void setHref( final String href ) { 519 set( "href",getRequestParameter( href ) ); 520 } 521 522 /** 523 * メッセージラベル(msglbl)をセットします。 524 * 525 * メッセージラベルは、meg属性か、lbl属性で登録された値を、 526 * それぞれのリソースに応じて各言語に変換した結果を格納しています。 527 * meg属性 と lbl属性は、同時登録できません。 528 * 529 * @og.rev 5.7.1.2 (2013/12/20) msg ⇒ msglbl 変更 530 * 531 * @param gamenId 画面ID 532 * 533 * @return メッセージラベル 534 * @og.rtnNotNull 535 */ 536 private String getMsglbl( final String gamenId ) { 537 final StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE ); 538 final String msglbl = getMsglbl(); // 5.7.1.2 (2013/12/20) msg ⇒ msglbl 変更 539 540 // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..; 541 if( msglbl == null ) { 542 if( body == null || body.isEmpty() ) { 543 final GUIInfo guiInfo = getGUIInfo( gamenId ); // 4.0.0 (2005/01/31) 544 if( guiInfo != null ) { 545 rtn.append( guiInfo.getLongName() ); 546 } 547 } 548 else { 549 rtn.append( body ); 550 } 551 } 552 else { 553 rtn.append( msglbl ); 554 set( "accesskey",nval( get( "accesskey" ),accesskey ) ); 555 rtn.append( '(' ).append( get( "accesskey" ) ).append( ')' ) ; // 6.0.2.5 (2014/10/31) char を append する。 556 } 557 558 return rtn.toString() ; 559 } 560 561 /** 562 * 画面に戻るボタン/リンクを表示するかどうかを条件判定します。 563 * 引数の gamenId は、BACK_GAMENID の事で、このタグの属性定義で設定されて 564 * いない場合は、session より、BACK_GAMENID を取り出します。つまり、取り出す為には、 565 * command="NEW" で、キャッシュに設定しておく必要があります。 566 * 567 * 随時、条件を追加していきます。 568 * 569 * 条件1:自分自身へ戻る機能はサポートできません。 570 * 条件2:command="NEW" で、キャッシュに設定しておく必要がある。 571 * 572 * @og.rev 3.5.5.0 (2004/03/12) デバッグ情報を出力するように機能追加 573 * 574 * @param gmnId 画面ID(BACK_GAMENID) 575 * 576 * @return 判定結果 577 */ 578 private boolean checkCondition( final String gmnId ) { 579 580 final String thisGamen = getGUIInfoAttri( "KEY" ); // 4.0.0 (2005/01/31) 581 final boolean rtn = gmnId != null 582 && gmnId.length() > 0 583 && ! gmnId.equals( thisGamen ) ; 584 585 // 3.5.5.0 (2004/03/12) 586 if( isDebug() ) { 587 final String cmd =pageContext.getRequest().getParameter( "command" ); 588 589 // 6.0.2.5 (2014/10/31) char を append する。 590 final StringBuilder buf = new StringBuilder( BUFFER_MIDDLE ) 591 .append( getDocumentLink() ) // 4.0.0 (2005/02/28) 592 .append( "<pre>" ) 593 .append( "command =[" ).append( cmd ).append( ']' ).append( CR ) 594 .append( "type =[" ).append( type ).append( ']' ).append( CR ) 595 .append( "gamenId =[" ).append( gmnId ).append( ']' ).append( CR ) 596 .append( "thisGamen=[" ).append( thisGamen ).append( ']' ).append( CR ) 597 .append( "checkCondition=[" ).append( rtn ).append( ']' ) 598 .append( "</pre>" ); 599 jspPrint( buf.toString() ); 600 } 601 602 return rtn ; 603 } 604}