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