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