    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.db.DBTableModel;
    021import org.opengion.hayabusa.resource.GUIInfo;
    022import org.opengion.fukurou.util.XHTMLTag;
    023import org.opengion.fukurou.util.StringUtil;
    024import org.opengion.fukurou.util.ToString;                                              // 6.1.1.0 (2015/01/17)
    025
    026import static org.opengion.fukurou.util.StringUtil.nval ;
    027
    028/**
    029 * フレームを作成するHTML拡張タグで、引数の受け渡しが可能です。
    030 *
    031 * @og.formSample
    032 * ●形式：&lt;og:frame src="…" name="…" /&gt;
    033 * ●body：なし
    034 *
    035 * ●Tag定義：
    036 *   &lt;og:frame
    037 *       src              ○【HTML】フレームに表示するソースファイルを指定します(必須)。
    038 *       name             ○【HTML】フレーム名を指定します(例：QUERY,RESULT,CONTENTS など)(必須)。
    039 *       changeGamen        【TAG】ソース指定の画面を変更します
    040 *       changeHref         【TAG】forwardしたいJSPファイル名を記述します(例:result など) 7.4.2.0 (2021/05/14)
    041 *       keys               【TAG】引数のキーを指定します
    042 *       vals               【TAG】引数の値を指定します 7.4.3.0 (2021/06/11)
    043 *       dbTable            【TAG】前ページで選択したデータ列の情報を次のページに渡すかどうか[true/false]を指定します(初期値:false)
    044 *       longdesc           【HTML】フレームに関する詳しい説明のあるURL(lobgdesc)を指定します
    045 *       forceEnc           【TAG】(通常は使いません) valsの値が[で開始している場合でもURLEncodeを通すかを設定します(初期値:false) 5.10.15.3 (2019/09/27)
    046 *       id                 【HTML】要素に対して固有の名前(id)をつける場合に設定します
    047 *       clazz              【HTML】要素に対して class 属性を設定します
    048 *       title              【HTML】要素に対する補足的情報(title)を設定します
    049 *       style              【HTML】この要素に対して適用させるスタイルシート(style)を設定します
    050 *       caseKey            【TAG】このタグ自体を利用するかどうかの条件キーを指定します(初期値:null) 5.7.7.2 (2014/06/20)
    051 *       caseVal            【TAG】このタグ自体を利用するかどうかの条件値を指定します(初期値:null) 5.7.7.2 (2014/06/20)
    052 *       caseNN             【TAG】指定の値が、null/ゼロ文字列 でない場合(Not Null=NN)は、このタグは使用されます(初期値:判定しない) 5.7.7.2 (2014/06/20)
    053 *       caseNull           【TAG】指定の値が、null/ゼロ文字列 の場合は、このタグは使用されます(初期値:判定しない) 5.7.7.2 (2014/06/20)
    054 *       caseIf             【TAG】指定の値が、true/TRUE文字列の場合は、このタグは使用されます(初期値:判定しない)
    055 *       debug              【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false)
    056 *   /&gt;
    057 *
    058 * 【廃止】7.0.1.0 (2018/10/15) 物理削除
    059 *   //  marginwidth        【廃止】フレームの左右余白サイズ(marginwidth)を指定します(HTML5廃止属性)
    060 *   //  marginheight       【廃止】フレームの上下余白サイズ(marginheight)を指定します(HTML5廃止属性)
    061 *   //  noresize           【廃止】フレームサイズを変更できないよう(noresize)に指定します(HTML5廃止属性) 6.9.5.0 (2018/04/23) 物理削除
    062 *   //  frameborder        【廃止】フレームの境界線(frameborder)の[0:非表示/1:表示]を指定します(初期値:1)(HTML5廃止属性) 6.9.5.0 (2018/04/23) 物理削除
    063 *   //  scrolling          【廃止】スクロールバー(scrolling)の表示/非表示[auto/yes/no]を指定します(初期値:auto)(HTML5廃止属性)
    064 *
    065 * ●使用例：
    066 *    ・一般的な例：フレーム分割する構文は、HTML準拠。リクエスト変数は各フレームまで転送されます。
    067 *    &lt;frameset&gt;
    068 *        &lt;og:frame src="query.jsp"   name="QUERY"  /&gt;
    069 *        &lt;og:frame src="forward.jsp" name="RESULT" /&gt;
    070 *    &lt;/frameset&gt;
    071 *
    072 *    ・DBTableModel の値(例ではPN)を、取り出して、リクエスト変数として利用します。
    073 *      現状では、commonForward タグ の useTableData="true" dbkeys="{&#064;dbkeys}" 属性を利用します。
    074 *    &lt;frameset&gt;
    075 *        &lt;og:frame src="query.jsp"   name="QUERY"  keys="PN" dbTable="true" /&gt;
    076 *        &lt;og:frame src="forward.jsp" name="RESULT" keys="PN" dbTable="true" /&gt;
    077 *    &lt;/frameset&gt;
    078 *
    079 *    ・changeGamen 属性を利用して、ソース指定の画面を切り替えます。
    080 *      たとえば、jsp/index.jsp では、GAMENID属性がURLに存在する場合、直接その画面を
    081 *      表示させることができます。
    082 *    &lt;frameset cols="160,*,0" frameborder="1" framespacing="1"&gt;
    083 *        &lt;og:frame src="menu/menu.jsp"    name="MENU" /&gt;
    084 *        &lt;og:frame src="GE0000/index.jsp" name="CONTENTS" keys="PN" vals="LKIS" changeGamen="{&#064;GAMENID}" /&gt;
    085 *    &lt;/frameset&gt;
    086 *
    087 * @og.group 画面部品
    088 *
    089 * @version  4.0
    090 * @author       Kazuhiko Hasegawa
    091 * @since    JDK5.0,
    092 */
    093public class FrameTag extends HTMLTagSupport {
    094        /** このプログラムのVERSION文字列を設定します。   {@value} */
    095        private static final String VERSION = "7.4.3.0 (2021/06/11)" ;
    096        private static final long serialVersionUID = 743020210611L ;
    097
    098        private String                  tableId         = HybsSystem.TBL_MDL_KEY;
    099        private String                  changeGmn       ;
    100        private String                  changeHref      = "index";                                                              // 7.4.2.0 (2021/05/14)
    101        private String                  keys            ;
    102        private String                  vals            ;                                                                               // 7.4.3.0 (2021/06/11)
    103        private transient DBTableModel table;
    104        private boolean                 dbTable ;
    105
    106        // 3.5.2.0 (2003/10/20) システムパラメータ の FRAME_UNDER_BAR_REQUEST_KEY_USED を使用。
    107        private final boolean UNDER_BAR_KEY_USED = HybsSystem.sysBool( "FRAME_UNDER_BAR_REQUEST_KEY_USED" );
    108        /** 強制URLエンコード用 */
    109        protected boolean useForceEnc   ;       // 5.10.15.3 (2019/09/27) 強制URLエンコード用
    110
    111        /**
    112         * デフォルトコンストラクター
    113         *
    114         * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor.
    115         */
    116        public FrameTag() { super(); }          // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。
    117
    118        /**
    119         * タグリブオブジェクトをリリースします。
    120         * キャッシュされて再利用されるので、フィールドの初期設定を行います。
    121         *
    122         * @og.rev 2.0.0.4 (2002/09/27) カスタムタグの release() メソッドを、追加
    123         * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。
    124         * @og.rev 5.10.15.3 (2019/09/27) forceEnc追加
    125         * @og.rev 7.4.3.0 (2021/06/11) URL の引数にセットする値を指定する
    126         *
    127         */
    128        @Override
    129        protected void release2() {
    130                super.release2();
    131                tableId         = HybsSystem.TBL_MDL_KEY;
    132                changeGmn       = null;                                                                                                         // 4.0.0 (2005/02/28)
    133                changeHref      = "index";                                                                                                      // 7.4.2.0 (2021/05/14)
    134                keys            = null;
    135                vals            = null;                                                                                                         // 7.4.3.0 (2021/06/11)
    136                table           = null;
    137                dbTable         = false;
    138                useForceEnc     = false;                                                                                                        // 5.10.15.3 (2019/09/27)
    139        }
    140
    141        /**
    142         * リンクを作成します。
    143         *
    144         * @og.rev 3.5.4.0 (2003/11/25) comand="RENEW" 時には、dbTable 属性は、強制的に false とします。
    145         * @og.rev 5.9.1.2 (2015/10/23) iframeとの継承関係で、共通的に呼び出すメソッドを追加します。
    146         *
    147         * @return      リンクタグ文字列
    148         * @og.rtnNotNull
    149         */
    150        @Override
    151        protected String makeTag() {
    152                // 7.4.2.0 (2021/05/14) MOD
    153                if( changeGmn != null ) {
    154                        final GUIInfo guiInfo = getGUIInfo( changeGmn );
    155                        if( guiInfo != null && guiInfo.getAddress() != null && guiInfo.getAddress().length() > 0 ) { // 見つからない場合は、アクセス不可
    156                                changeGmn = guiInfo.getRealAddress( changeHref ) + ".jsp" ;
    157                        }
    158                        set( "src",changeGmn );
    159                }
    160//              if( changeGmn != null ) { set( "src",changeGmn ); }                                             7.4.2.0 (2021/05/14) DEL
    161
    162                final String cmd = getRequest().getParameter( "command" );
    163                if( "RENEW".equals( cmd ) ) { dbTable = false; }
    164
    165                setIdName();
    166                final String urlEnc = getUrlEncode();
    167                return makeTagFrame( urlEnc );
    168        }
    169
    170        /**
    171         * リンクを作成します。
    172         *
    173         * @og.rev 5.9.1.2 (2015/10/23) iframeとの継承関係で、共通的に呼び出すメソッドを追加します。
    174         *
    175         * @param       urlEnc エンコードされたURL
    176         * @return      リンクタグ文字列
    177         * @og.rtnNotNull
    178         */
    179        protected String makeTagFrame( final String urlEnc ) {
    180                return XHTMLTag.frame( getAttributes(),urlEnc );
    181        }
    182
    183        /**
    184         * id 属性 / name 属性 セット
    185         *
    186         * フレーム名は id 属性で登録する(XHTML) 互換性のため、
    187         * id 属性と name 属性には同じ値をセットしておく。
    188         *
    189         */
    190        private void setIdName() {
    191                final String idno       = get( "id" );
    192                final String name       = get( "name" );
    193                if( idno == null || idno.isEmpty() ) {
    194                        if( name != null && name.length() > 0 ) {
    195                                set( "id", name );
    196                        }
    197                        else {
    198                                final String errMsg = "id 属性か name 属性のどちらかは登録してください。";
    199                                throw new HybsSystemException( errMsg );
    200                        }
    201                }
    202                else {
    203                        set( "name", idno );
    204                }
    205        }
    206
    207        /**
    208         * keys 属性 を元に、request情報より values の値を取り込む。
    209         *
    210         * keys属性は キー情報がCSV形式になっている為,ばらして
    211         * values属性の配列に一つづつ設定していきます。
    212         *
    213         * @og.rev 2.0.0.2 (2002/09/24) 検索結果の値を取り込めていなかったバグを修正。
    214         * @og.rev 2.1.1.1 (2002/11/15) 選択行情報を取り込めていなかったバグを修正。
    215         * @og.rev 3.4.0.3 (2003/09/10) DBTableModelへのリクエスト情報をURLに連結しないように変更。
    216         * @og.rev 4.0.0.0 (2005/01/31) getParameterRows() を使用するように変更
    217         * @og.rev 5.10.15.3 (2019/09/27) forceEnc追加
    218         * @og.rev 7.4.3.0 (2021/06/11) URL の引数にセットする値を指定する
    219         *
    220         * @return      URLエンコードされた文字列
    221         * @og.rtnNotNull
    222         */
    223//      private String getUrlEncode() {
    224        protected String getUrlEncode() {
    225                final int[] rowNo = getParameterRows();                                                                 // 4.0.0 (2005/01/31)
    226                final int selcount = rowNo.length;                                                                              // 4.0.0 (2005/01/31)
    227
    228                final String[] key = (String[])StringUtil.enume2Array( getParameterNames(), new String[0] );
    229                String[] prmKey = null;                                                                                                 // 7.4.3.0 (2021/06/11) MOD dbkey ⇒ prmKey
    230                String[] prmVal = null;                                                                                                 // 7.4.3.0 (2021/06/11) ADD
    231
    232                int dbcount = 0;
    233                int prmcount = 0;                                                                                                               // 7.4.3.0 (2021/06/11) ADD
    234
    235                int recount = 0;
    236                for( int i=0; i<key.length; i++ ) {
    237                        if( isNormalRequestKey( key[i] ) ) {                                                            // 3.4.0.3 (2003/09/10)
    238                                recount++;
    239                        }
    240                }
    241
    242//              if( keys != null && dbTable && selcount > 0 ) {                                                 // 7.4.3.0 (2021/06/11) MOD
    243                if( keys != null && dbTable && selcount > 0 && vals == null ) {
    244                        prmKey = StringUtil.csv2Array( keys );
    245                        dbcount = prmKey.length;
    246                }
    247                // 7.4.3.0 (2021/06/11) ADD
    248                else if( keys != null && vals != null ) {
    249                        prmKey = StringUtil.csv2Array( keys );
    250                        prmVal = StringUtil.csv2Array( vals );
    251                        prmcount = prmKey.length;
    252                }
    253
    254//              String[] valt = new String[ recount + dbcount + selcount ];                             // 7.4.3.0 (2021/06/11) MOD
    255//              String[] keyt = new String[ recount + dbcount + selcount ];                             // 7.4.3.0 (2021/06/11) MOD
    256                String[] valt = new String[ recount + dbcount + selcount + prmcount ];
    257                String[] keyt = new String[ recount + dbcount + selcount + prmcount ];
    258
    259                int j = 0;
    260                // ① 0～recount
    261                for( int i=0; i<key.length; i++ ) {
    262                        if( isNormalRequestKey( key[i] ) ) {                                                            // 3.4.0.3 (2003/09/10)
    263                                keyt[j] = key[i];
    264                                valt[j] = getRequestValue( key[i] );
    265                                j++;
    266                        }
    267                }
    268
    269                // ② recount～dbcount
    270                if( dbTable && dbcount > 0 ) {
    271                        table = (DBTableModel)getSessionAttribute( tableId );
    272                        if( table != null ) {
    273                                for( int i=0; i<dbcount; i++ ) {
    274                                        keyt[recount + i] = prmKey[i];
    275                                        valt[recount +i]  = table.getValue(rowNo[0],table.getColumnNo( prmKey[i] ));
    276                                }
    277                        }
    278                }
    279
    280                // ③ dbcount～selcount
    281                // 4.0.0 (2005/01/31) selected文字配列をrowNo数字配列に変更
    282                for( int i=0; i<selcount; i++ ) {
    283                        keyt[recount + dbcount + i] = HybsSystem.ROW_SEL_KEY;
    284                        valt[recount + dbcount + i]     = String.valueOf( rowNo[i] );
    285                }
    286
    287                // ④ selcount～prmcount 7.4.3.0 (2021/06/11) ADD
    288                if( keys != null && vals != null ) {
    289                        for( int i=0; i<prmcount; i++ ) {
    290                                keyt[recount + dbcount + selcount + i] = prmKey[i];
    291                                valt[recount + dbcount + selcount + i] = prmVal[i];
    292                        }
    293                }
    294
    295//              return XHTMLTag.urlEncode( keyt,val );
    296                return XHTMLTag.urlEncode( keyt,valt,"&",useForceEnc );                                 // 5.10.15.3 (2019/09/27)
    297        }
    298
    299        /**
    300         * 【HTML】フレームに表示するソースファイルを指定します。
    301         *
    302         * @og.tag フレームに表示するソースファイルを指定します。
    303         *
    304         * @param       src ソースファイル
    305         */
    306        public void setSrc( final String src ) {
    307                set( "src",getRequestParameter( src ) );
    308        }
    309
    310        /**
    311         * 【HTML】フレーム名を指定します(例：QUERY,RESULT,CONTENTS など)。
    312         *
    313         * @og.tag フレーム名を指定します。
    314         *
    315         * @param       name フレーム名
    316         */
    317        public void setName( final String name ) {
    318                set( "name",getRequestParameter( name ) );
    319        }
    320
    321        /**
    322         * 【HTML】フレームに関する詳しい説明のあるURL(lobgdesc)を指定します。
    323         *
    324         * @og.tag lobgdescを指定します。
    325         *
    326         * @param       longdesc 詳しい説明のあるURL
    327         */
    328        public void setLongdesc( final String longdesc ) {
    329                set( "longdesc",getRequestParameter( longdesc ) );
    330        }
    331
    332        /**
    333         * 【TAG】valsの値が[で開始している場合でもURLEncodeを通すかを設定します(初期値:false)。
    334         *
    335         * @og.tag
    336         * テーブルモデルの値の変換のため、通常は先頭が[の場合はエンコードがかかりません。
    337         * 強制的にかける場合にtrueにします。
    338         *
    339         * @og.rev 5.10.15.3 (2019/09/27) forceEnc追加
    340         *
    341         * @param flg URLEncodeを通す場合は、trueをｾｯﾄ
    342         */
    343        public void setForceEnc( final String flg ) {
    344                useForceEnc = nval( getRequestParameter( flg ), useForceEnc );
    345        }
    346
    347//      /**
    348//       * 【廃止】フレームの左右余白サイズ(marginwidth)を指定します。
    349//       *  HTML5では廃止されている属性のため、可能であればCSSを利用してください。
    350//       *
    351//       * @og.tag フレームの左右余白サイズを指定します。
    352//       *
    353//       * @og.rev 6.9.5.0 (2018/04/23) 値の設定を行いません。
    354//       * @og.rev 7.0.1.0 (2018/10/15) 廃止：物理削除
    355//       *
    356//       * @param       marginwidth 左右余白サイズ
    357//       */
    358//      public void setMarginwidth( final String marginwidth ) {
    359////            set( "marginwidth",getRequestParameter( marginwidth ) );
    360//      }
    361
    362//      /**
    363//       * 【廃止】フレームの上下余白サイズ(marginheight)を指定します。
    364//       *  HTML5では廃止されている属性のため、可能であればCSSを利用してください。
    365//       *
    366//       * @og.tag フレームの上下余白サイズを指定します。
    367//       *
    368//       * @og.rev 6.9.5.0 (2018/04/23) 値の設定を行いません。
    369//       * @og.rev 7.0.1.0 (2018/10/15) 廃止：物理削除
    370//       *
    371//       * @param       marginheight 上下余白サイズ
    372//       */
    373//      public void setMarginheight( final String marginheight ) {
    374////            set( "marginheight",getRequestParameter( marginheight ) );
    375//      }
    376
    377//      /**
    378//       * 【廃止】フレームサイズを変更できないよう(noresize)に指定します。
    379//       *  HTML5では廃止されている属性のため、可能であればCSSを利用してください。
    380//       *
    381//       * @og.tag
    382//       * フレームサイズを変更させない場合は、"noresize" を指定します。
    383//       * 処理自体は、空文字列以外であれば、内部的に"noresize" を設定します。
    384//       *
    385//       * @og.rev 6.9.5.0 (2018/04/23) 物理削除
    386//       *
    387//       * @param       noresize フレームサイズ変更不可指定
    388//       */
    389//      public void setNoresize( final String noresize ) {
    390//              final String ns = getRequestParameter( noresize );
    391//              if( ns != null ) { set( "noresize", "noresize" ); }
    392//      }
    393
    394//      /**
    395//       * 【廃止】スクロールバー(scrolling)の表示/非表示[auto/yes/no]を指定します(初期値:auto)。
    396//       *  HTML5では廃止されている属性のため、可能であればCSSを利用してください。
    397//       *
    398//       * @og.tag
    399//       * auto:必要に応じてスクロールバーを表示(初期値)
    400//       * yes:常にスクロールバーを表示
    401//       * no:常にスクロールバーを表示しない
    402//       *
    403//       * @og.rev 6.9.5.0 (2018/04/23) 値の設定を行いません。
    404//       * @og.rev 7.0.1.0 (2018/10/15) 廃止：物理削除
    405//       *
    406//       * @param       scrolling  スクロールバーの表示方法指定 [auto:自動/yes:常時表示/no:非表示]
    407//       */
    408//      public void setScrolling( final String scrolling ) {
    409////            set( "scrolling",getRequestParameter( scrolling ) );
    410//      }
    411
    412//      /**
    413//       * 【廃止】フレームの境界線(frameborder)の[0:非表示/1:表示]を指定します(初期値:1)。
    414//       *  HTML5では廃止されている属性のため、可能であればCSSを利用してください。
    415//       *
    416//       * @og.tag
    417//       * 0:枠を表示しない
    418//       * 1:枠を表示する。
    419//       * 初期値は、1:枠を表示する です。
    420//       *
    421//       * @og.rev 6.9.5.0 (2018/04/23) 物理削除
    422//       *
    423//       * @param       frameborder     フレームの境界線 [0:枠非表示/1:枠表示]
    424//       */
    425//      public void setFrameborder( final String frameborder ) {
    426//              set( "frameborder",getRequestParameter( frameborder ) );
    427//      }
    428
    429        /**
    430         * 【TAG】ソース指定の画面を変更します。
    431         *
    432         * @og.tag
    433         * src 指定がデフォルト設定で、changeGamen属性が設定されている
    434         * 場合には、この値が優先されます。
    435         * changeGamen は、画面IDのみ指定してください。src には、このID＋"/index.jsp" が
    436         * 追加されます。つまり、changeGamen="{&#064;GAMENID}" という指定をしておけば、
    437         * FavoriteLinkTag 等で引数に GAMENID が指定された場合のみ、この属性が有効になり、
    438         * src="実画面ID/index.jsp" が指定されたことと同じ結果になります。
    439         *
    440         * changeHref が指定され場合には、src="実画面ID/JSPID.jsp" が指定されたことと同じ
    441         * 結果になります。
    442         *
    443         * @og.rev 3.1.2.0 (2003/04/07) 画面IDと実画面ディレクトリとの関連見直し(DIRの代りにGAMENIDを推奨)
    444         * @og.rev 4.2.1.1 (2008/04/30) 画面切り替えをするのは、アドレスが設定されいる場合に限る
    445         * @param       src     置換えソース
    446         */
    447        public void setChangeGamen( final String src ) {
    448                changeGmn = nval( getRequestParameter( src ),changeGmn ) ;                              // 7.4.2.0 (2021/05/14) MOD
    449//              final String sc = nval( getRequestParameter( src ),changeGmn );
    450//              if( sc != null ) {
    451//                      final GUIInfo guiInfo = getGUIInfo( sc );
    452//                      if( guiInfo != null && guiInfo.getAddress() != null && guiInfo.getAddress().length() > 0 ) { // 見つからない場合は、アクセス不可
    453//                              changeGmn = guiInfo.getRealAddress( "index.jsp" );
    454//                      }
    455//              }
    456        }
    457
    458        /**
    459         * 【TAG】ソース指定の画面を変更します。
    460         *
    461         * @og.tag
    462         * forwardしたいJSPファイル名を記述します。(例:result など)
    463         * 初期値は "index.jsp" が設定されます。
    464         * 実際には、各JSP画面(result.jsp )にリクエストが転送されます。
    465         *
    466         * changeGamenとchangeHref が指定され場合には、src="実画面ID/JSPID.jsp" が
    467         * 指定されたことと同じ結果になります。
    468         *
    469         * @og.rev 7.4.2.0 (2021/05/14) frameタグでforwardしたいJSPファイルの指定ができるようにする
    470         * @param       href    置換えソース
    471         */
    472        public void setChangeHref( final String href ) {
    473                changeHref = nval( getRequestParameter( href ) ,changeHref ) ;
    474        }
    475
    476        /**
    477         * 【TAG】引数のキーを指定します。
    478         *
    479         * @og.tag
    480         * URL の引数にセットするキーを CSV形式でセットします。
    481         *
    482         * @param       key キー(CSV形式)
    483         */
    484        public void setKeys( final String key ) {
    485                keys = getRequestParameter( key ) ;
    486        }
    487
    488        /**
    489         * 【TAG】引数の値を指定します。
    490         *
    491         * @og.tag
    492         * URL の引数にセットする値を CSV形式でセットします。
    493         *
    494         * @og.rev 7.4.3.0 (2021/06/11) URL の引数にセットする値を指定する
    495         *
    496         * @param       val 値(CSV形式)
    497         */
    498        public void setVals( final String val ) {
    499                vals = getRequestParameter( val );
    500        }
    501
    502        /**
    503         * 【TAG】前ページで選択したデータ列の情報を次のページに渡すかどうか[true:渡す/false:渡さない]を指定します(初期値:false)。
    504         *
    505         * @og.tag
    506         * ただし、１行分のデータのみです。(複数選択時は、最初の１件目)
    507         * trueを指定すると、データを渡します。falseの場合は、渡しません。
    508         * 初期値は、false:渡さない です。
    509         *
    510         * @param       db 選択データを渡すかどうか [true:渡す/false:渡さない]
    511         */
    512        public void setDbTable( final String db ) {
    513                dbTable = nval( getRequestParameter( db ),dbTable );
    514        }
    515
    516        /**
    517         * 標準的な リクエスト情報かどうかを判断します。
    518         *
    519         * これは、引数のキーが、HybsSystem.ROW_SEL_KEY か、
    520         * DBTableModel で送信されたキー( キー__番号)形式の場合は
    521         * false を返します。
    522         * 通常のリクエストキーとして扱いたくない場合の判定に使用します。
    523         *
    524         * @og.rev 3.4.0.3 (2003/09/10) 新規追加
    525         * @og.rev 3.5.2.0 (2003/10/20) システムパラメータ の FRAME_UNDER_BAR_REQUEST_KEY_USED を使用。
    526         * @og.rev 3.5.5.0 (2004/03/12) 名前と行番号の区切り記号("__")を、HybsSystem.JOINT_STRING  に変更。
    527         * @og.rev 6.8.1.1 (2017/07/22) 転送不要のキーを除外します。
    528         *
    529         * @param key 判定するキー
    530         *
    531         * @return 標準的な リクエスト情報かどうか [true:標準的/false:それ以外]
    532         */
    533        private boolean isNormalRequestKey( final String key ) {
    534                return  key != null &&
    535                                ! key.equals(     HybsSystem.ROW_SEL_KEY  ) &&
    536                                ! key.startsWith( HybsSystem.NO_XFER_KEY  ) &&                          // 6.8.1.1 (2017/07/22)
    537                                ( key.indexOf(    HybsSystem.JOINT_STRING ) < 0 || UNDER_BAR_KEY_USED ) ;
    538        }
    539
    540        /**
    541         * このオブジェクトの文字列表現を返します。
    542         * 基本的にデバッグ目的に使用します。
    543         *
    544         * @return このクラスの文字列表現
    545         * @og.rtnNotNull
    546         */
    547        @Override
    548        public String toString() {
    549                return ToString.title( this.getClass().getName() )
    550                                .println( "VERSION"             ,VERSION        )
    551                                .println( "tableId"             ,tableId        )
    552                                .println( "changeGmn"   ,changeGmn      )
    553                                .println( "changeHref"  ,changeHref     )
    554                                .println( "keys"                ,keys           )
    555                                .println( "vals"                ,vals           )                                                       // 7.4.3.0 (2021/06/11)
    556                                .println( "dbTable"             ,dbTable        )
    557                                .println( "Other..."    ,getAttributes().getAttribute() )
    558                                .fixForm().toString() ;
    559        }
    560}