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     */
016    package org.opengion.hayabusa.taglib;
017    
018    import static org.opengion.fukurou.util.StringUtil.nval;
019    
020    import java.io.IOException;
021    import java.io.ObjectInputStream;
022    import java.io.ObjectOutputStream;
023    
024    import javax.mail.internet.MimeUtility;
025    import javax.servlet.ServletException;
026    import javax.servlet.http.HttpServletRequest;
027    import javax.servlet.http.HttpServletResponse;
028    
029    import org.opengion.fukurou.util.LogWriter;
030    import org.opengion.fukurou.util.StringUtil;
031    import org.opengion.fukurou.util.XHTMLTag;
032    import org.opengion.hayabusa.common.HybsSystem;
033    import org.opengion.hayabusa.common.HybsSystemException;
034    import org.opengion.hayabusa.db.DBTableModel;
035    import org.opengion.hayabusa.resource.GUIInfo;
036    
037    /**
038     * 制御を別の画面にフォワードするå?合に使用するタグでã�?通常は、entry.jsp で使用しまã�?ã€?
039     *
040     * フォワード時に、指定ã?引数をセãƒ?ƒˆできますã?
041     *
042     * @og.formSample
043     * ●形式ï¼?lt;og:forward page="…" gamenId="[…]" />
044     * ●body?šなã�?
045     *
046     * ●Tag定義??
047     *   <og:forward
048     *       gamenId            【TAG】gamenId 属æ?を登録しまã�?
049     *       page             ○ã?TAG】転送å?URLを指定しまã�?å¿??)ã€?
050     *       keys               【TAG】キーã‚?CSV 形式でセãƒ?ƒˆしまã�?
051     *       vals               【TAG】キーに対応するå?ã‚?CSV 形式でセãƒ?ƒˆしまã�?
052     *       dbkeys             【TAG】DBキーをCSV 形式でセãƒ?ƒˆしまã�?
053     *       scope              【TAG】キャãƒ?‚·ュする場合ã?スコープ[request/page/session/applicaton]を指定しまã�?初期値:session)
054     *       useRedirect        【TAG】response.sendRedirect するかどã�?�‹[true/false]を指定しまã�?初期値:false)
055     *       target             【TAG】サブミãƒ?ƒˆ先ã?æ–?›¸を表示させるフレーãƒ??またã?ウィンドウの名前を指定しまã�?
056     *       filename           【TAG】ファイル転送時にファイル名ã?別名をæŒ?®šしまã�?初期値:null)
057     *       noTransition       【TAGã€?通常は使ã�?�¾せん)画面遷移を行わなã�?½¢式ã?登録方法を使用するかをæŒ?®šしまã�?
058     *       useAjaxSubmit      【TAGã€?通常は使ã�?�¾せん)ajaxを利用したsubmitを利用するかどã�?�‹を指定しまã�?
059     *       redirectEncode     【TAGã€?通常は使ã�?�¾せん)useRedirect=true時に 日本語を含ã‚?»¢送å?(page)をバイナリ変換するときã?コード名[UTF-8/Windows-31J]など(初期値:null)
060     *       debug              【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
061     *   />
062     *
063     * ●使用ä¾?
064     *       <og:forward
065     *          page          = "転送å?URLを指定しまã�?å¿??)ã€?
066     *          dbkeys        = "DBキーをCSV 形式でセãƒ?ƒˆしますã?"
067     *          keys          = "キーã‚?CSV 形式でセãƒ?ƒˆしますã?"
068     *          vals          = "キーに対応するå?ã‚?CSV 形式でセãƒ?ƒˆしますã?"
069     *          scope         = "キャãƒ?‚·ュする場合ã?スコーãƒ?request,page,session,applicaton)を指定しまã�?初期値:session)ã€?
070     *          gamenId       = "gamenId 属æ?を登録しますã?"
071     *          useRedirect   = "useRedirect 属æ?を登録しますã?"
072     *          filename      = "ファイル転送時にファイル名をæŒ?®šするå?合に設定しますã?"
073     *          target        = "taregt 属æ?を登録しますã?"
074     *          noTransition  = "実際にforwardせずに、id="forwardUrl"属æ?のbody部åˆ?�«遷移先ã?URLをå?力しますã?(画面遷移なしモード時に使用しまã�?"
075     *       />
076     *
077     * @og.group 画面制御
078     *
079     * @version  4.0
080     * @author       Kazuhiko Hasegawa
081     * @since    JDK5.0,
082     */
083    public class ForwardTag extends CommonTagSupport {
084            //* こã?プログラãƒ??VERSIONæ–?­—å?を設定しますã?       {@value} */
085            private static final String VERSION = "5.7.4.1 (2014/03/14)" ;
086    
087            private static final long serialVersionUID = 574120140314L ;
088    
089            private transient DBTableModel  table   = null;
090            private String          tableId         = HybsSystem.TBL_MDL_KEY;
091            private String          page            = null;
092            private String          keys            = null;
093            private String          dbkeys          = null;
094            private String[]        vals            = null;
095            private String          gamenId         = null;         // 3.5.4.9 (2004/02/25) 追åŠ?
096            private boolean         useRedirect = false;    // 3.5.6.6 (2004/08/23) 追åŠ?
097            private String          target          = null;         // 3.8.0.4 (2005/08/08) 追åŠ?
098            private String          filename        = null;         // 4.0.0 (2005/11/30) 追åŠ?
099            private static final String             disposition = "inline"; // 固å®?
100            private boolean         noTransition= false;    // 4.3.3.0 (2008/10/01) 追åŠ?
101            private boolean         useAjaxSubmit           = false;        // 4.3.8.0 (2009/08/01) 追åŠ?
102    //      private boolean         useEncodeRedirect       = true;         // 5.6.5.0 (2013/06/07) 追åŠ??即å»?­¢
103            private String          redirectEncode  = null;                 // 5.6.5.0 (2013/06/07) 追åŠ?
104    
105            /**
106             * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
107             *
108             * @og.rev 2.1.0.0 (2002/10/11) 戻りå?の先é?の "?" を追åŠ?�—なã�?‚ˆã�?�«変更ã€?
109             * @og.rev 3.0.1.3 (2003/03/11) 直接転送したå?合ã?整合æ?を取る為の対応ã?
110             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
111             * @og.rev 3.1.2.0 (2003/04/07) ソースコード中の固定å?をã?定義ファイルを使用するように変更するã€?
112             * @og.rev 3.5.4.9 (2004/02/25) gamenId を指定して、フォワードできるようにしますã?
113             * @og.rev 3.5.6.6 (2004/08/23) useRedirect 属æ?を追åŠ?�—ますã?
114             * @og.rev 4.3.3.0 (2008/10/01) noTransition 属æ?を追åŠ?�—ますã?
115             * @og.rev 4.3.7.1 (2009/06/08) target属æ?に絶対パス及ã?"_"で始まる予ç´?ªžをæŒ?®šできるようにしますã?
116             * @og.rev 4.3.8.0 (2009/08/01) useAjaxSubmit対応ã?noTransition値取得メソãƒ?ƒ‰名変更
117             * @og.rev 5.0.0.4 (2009/10/01) 画面遷移なし登録で戻った際にæœ?µ‚行が選択されるバグを修正
118             * @og.rev 5.1.3.0 (2010/02/01) noTransition、ajaxSubmitのコントロールは、requestで行うã€?
119             * @og.rev 5.1.6.0 (2010/05/01) IE以外ã?、MIMEエンコードするã?(RFC2231に従う)
120             * @og.rev 5.1.7.0 (2010/06/01) 画面IDをパラメーターに付加するã€?
121             * @og.rev 5.1.7.0 (2010/06/01) 遷移先がJSP以外ã?場合ã?、フォワードã?ージのキャãƒ?‚·ュをしなã�??
122             * @og.rev 5.1.8.0 (2010/07/01) httpが指定されてã�?�Ÿ場合に、è?身の画面IDが付加されるバグを修正
123             * @og.rev 5.3.8.0 (2011/08/01) ファイル名指定でIEの場合ã?URLエンコードすると途中でåˆ?‚Œるたã‚?IE7のバグ)、Shift_JIS(WIndows-31J)で直接æŒ?®šするã?
124             * @og.rev 5.6.5.0 (2013/06/07) redirectEncode 属æ?を追åŠ?�—ますã?
125             * @og.rev 5.7.4.1 (2014/03/14) 日本語ファイル名が正しく処ç�?�§きなã�?»¶を修正(IE11のMSIE関連)
126             *
127             * @return      後続å?ç�??æŒ?¤º
128             */
129            @Override
130            public int doEndTag() {
131                    debugPrint();           // 4.0.0 (2005/02/28)
132                    // noTransition = isNoTransitionRequest() || noTransition; // 4.3.3.0 (2008/10/01) 追åŠ?
133    //              noTransition = isNoTransitionSession() || noTransition; // 4.3.8.0 (2009/08/01) メソãƒ?ƒ‰名変更
134    //              useAjaxSubmit    = isAjaxSubmitSession() || useAjaxSubmit; // 4.3.8.0 (2009/08/01) 追åŠ?
135                    noTransition = isNoTransitionRequest(); // 5.1.3.0 (2010/02/01)
136                    useAjaxSubmit = isAjaxSubmitRequest(); // 5.1.3.0 (2010/02/01)
137    
138                    String urlEnc = getUrlEncode();
139                    String fwdUrl = makeGamenLink();                // 3.5.4.9 (2004/02/25)
140    
141                    HttpServletResponse response = (HttpServletResponse)pageContext.getResponse();
142                    try {
143                            String url = response.encodeRedirectURL( fwdUrl );      // 3.5.4.9 (2004/02/25)
144    
145                            if( filename != null ) {
146                                    // 5.1.6.0 (2010/05/01) IE以外ã?、MIMEエンコードするã?(RFC2231に従う)
147    //                              if( ( (HttpServletRequest)pageContext.getRequest() ).getHeader( "User-Agent" ).indexOf( "MSIE" ) == -1 ) {
148    //                                      filename = MimeUtility.encodeWord( filename, "UTF-8", "B" );
149    //                              }
150    //                              else {
151    //                                      // 5.3.8.0 (2011/08/01) IEの場合ã?URLエンコードすると途中でåˆ?‚Œるたã‚?IE7のバグ)、Shift_JIS(WIndows-31J)で直接æŒ?®šするã?
152    ////                                    filename = StringUtil.urlEncode( filename );
153    //                                      filename = new String( filename.getBytes("Windows-31J"), "ISO-8859-1" );
154    //                              }
155    
156                                    // 5.7.4.1 (2014/03/14) 日本語ファイル名が正しく処ç�?�§きなã�?»¶を修正(IE11のMSIE関連)
157                                    // 条件を反転させた上でIE11対応を行う
158                                    String reqHeader = ((HttpServletRequest)pageContext.getRequest()).getHeader( "User-Agent" );
159                                    if( reqHeader.indexOf( "MSIE" ) >= 0 || reqHeader.indexOf( "Trident" ) >= 0 ) {
160                                            filename = new String( filename.getBytes("Windows-31J"), "ISO-8859-1" );
161                                    }
162                                    else {
163                                            filename = MimeUtility.encodeWord( filename, "UTF-8", "B" );
164                                    }
165    
166                                    (response).setHeader( "Content-Disposition",disposition + "; filename=\"" + filename + "\"" );
167                            }
168                            // 5.1.7.0 (2010/06/01) 画面IDをパラメーターに付加するã€?
169                            // 5.1.8.0 (2010/07/01) httpが指定されてã�?�Ÿ場合に、è?身の画面IDが付加されるバグを修正
170                            else {
171    //                              if( page.endsWith( ".jsp" ) ) {
172                                    if( !page.startsWith( "http" ) && page.endsWith( ".jsp" ) ) {
173                                            if( keys == null || keys.length() == 0 || ( "," + keys + "," ).indexOf( ",GAMENID," ) < 0 ) {
174                                                    if( gamenId != null && gamenId.length() > 0 ) {
175                                                            url = XHTMLTag.addUrlEncode( url, "GAMENID=" + gamenId );
176                                                    }
177                                                    // useRedirect=trueでGAMENIDを指定せずã?../GF9100/index.jsp等と書かれてã�?‚‹場合ã?対å¿?
178                                                    else if( !useRedirect ) {
179                                                            url = XHTMLTag.addUrlEncode( url, "GAMENID=" + getGUIInfoAttri( "KEY" ) );
180                                                    }
181                                            }
182                                    }
183                            }
184    
185                            // 3.5.6.6 (2004/08/23) useRedirect 属æ?を追åŠ?
186                            String url2 = XHTMLTag.addUrlEncode( url , urlEnc );
187                            // 4.3.3.0 (2008/10/01) 追åŠ?
188                            // if( noTransition ) {
189                            if( noTransition || useAjaxSubmit ) { // 4.3.8.0 (2009/08/01) useAjaxSubmitと共用
190                                    // 5.0.0.4 (2009/10/01)
191                                    if( noTransition ) {
192                                            int selRow = nval( getRequestValue( "SEL_ROW" ),-1 );
193                                            if( selRow > 0 ) {
194                                                    url2 = XHTMLTag.addUrlEncode( url2, "SEL_ROW=" + selRow );
195                                            }
196                                    }
197                                    jspPrint( "<div id=\"noTransitionUrl\">" + url2 + "</div>" );
198                                    jspPrint( "<div id=\"noTransitionTarget\">" + target + "</div>" );
199                            }
200                            // 3.8.0.4 (2005/08/08) target 属æ?を追åŠ?�—ますã?
201    //                      else if( target != null ) {
202                            else if( target != null && target.length() > 0 ) {
203                                    // 4.3.7.1 (2009/06/08)
204                                    String src = null;
205                                    if( target.startsWith( "_b" ) ) { // "_blank"
206                                            src = "window.open(\"" + url2 + "\", \"_blank\") ";
207                                    }
208                                    else {
209                                            String frameTop = "";
210                                            if( target.indexOf('.') < 0 ) { frameTop = "top."; }
211                                            src = frameTop + target + ".location.href=\"" + url2 + "\"" + HybsSystem.CR;
212                                    }
213    //                              String script = "<script language=\"JavaScript\" ><!-- " + HybsSystem.CR
214                                    String script = "<script type=\"text/javascript\" ><!-- " + HybsSystem.CR
215                                                                    + src + HybsSystem.CR
216                                                            + "// --></script>" ;
217                                    jspPrint( script );
218                            }
219                            else if( useRedirect ) {
220                                    // 5.6.5.0 (2013/06/07) redirectEncode 属æ?追åŠ?
221                                    if( redirectEncode != null ) {
222                                            url2 = new String( url2.getBytes( redirectEncode ), "ISO-8859-1" );
223                                    }
224                                    response.sendRedirect( url2  );
225                            }
226                            else {
227                                    pageContext.forward( url2 );
228                            }
229                    } catch(IOException ex) {
230                            String errMsg = "フォワーãƒ?リãƒ?‚¤レクトでIOエラーが発生しましたã€?
231                                                                    + HybsSystem.CR
232                                                                    + fwdUrl + "?" + urlEnc ;
233                            throw new HybsSystemException( errMsg,ex );             // 3.5.5.4 (2004/04/15) 引数の並びé ?¤‰更
234                    } catch( ServletException ex) {
235                            String errMsg = "フォワーãƒ?リãƒ?‚¤レクトでServletエラーが発生しましたã€?
236                                                                    + HybsSystem.CR
237                                                                    + fwdUrl + "?" + urlEnc ;
238                            throw new HybsSystemException( errMsg,ex );             // 3.5.5.4 (2004/04/15) 引数の並びé ?¤‰更
239                    }
240    
241                    // 3.0.1.3 (2003/03/11) forward で直接転送したå?合ã?整合æ?を取る為の対応ã?
242                    // 5.1.7.0 (2010/06/01) 遷移先がJSP以外ã?場合ã?、フォワードã?ージのキャãƒ?‚·ュをしなã�??
243                    if( fwdUrl != null && fwdUrl.endsWith( ".jsp" ) ) {
244                            setSessionAttribute( HybsSystem.FORWARD_PAGE_KEY, fwdUrl );     // 3.5.4.9 (2004/02/25)
245                    }
246    
247                    return(SKIP_PAGE);              // ペã?ジの残りの処ç�?‚’行わなã�??
248            }
249    
250            /**
251             * タグリブオブジェクトをリリースしますã?
252             * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
253             *
254             * @og.rev 2.0.0.4 (2002/09/27) カスタãƒ?‚¿グの release() メソãƒ?ƒ‰をã?追åŠ?
255             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
256             * @og.rev 3.5.4.9 (2004/02/25) 画面ID属æ?(gamenId)を追åŠ?
257             * @og.rev 3.8.5.0 (2006/03/06) filename 属æ?を追åŠ?�—ますã?
258             * @og.rev 4.3.3.0 (2008/10/01) noTransition 属æ?を追åŠ?�—ますã?
259             * @og.rev 5.6.5.0 (2013/06/07) redirectEncode 属æ?を追åŠ?�—ますã?
260             *
261             */
262            @Override
263            protected void release2() {
264                    super.release2();
265                    tableId         = HybsSystem.TBL_MDL_KEY;
266                    page            = null;
267                    keys            = null;
268                    dbkeys          = null;
269                    vals            = null;
270                    table           = null;
271                    gamenId         = null;
272                    useRedirect = false;    // 3.5.6.6 (2004/08/23) 追åŠ?
273                    target          = null;         // 3.8.0.4 (2005/08/08) 追åŠ?
274                    filename        = null;
275                    noTransition= false;    // 4.3.3.0 (2008/10/01) 追åŠ?
276                    useAjaxSubmit           = false;        // 4.3.8.0 (2009/08/01) 追åŠ?
277                    redirectEncode  = null;                 // 5.6.5.0 (2013/06/07) 追åŠ?
278            }
279    
280            /**
281             * keys 属æ? をå?に、requestæƒ??より values の値を取り込ã‚??
282             *
283             * keys属æ?は キーæƒ??がカンマ区åˆ?‚Šになってã�?‚‹為,ばらして
284             * values属æ?の配å?にä¸?�¤づつ設定してã�?��ますã?
285             *
286             * @og.rev 3.1.7.0 (2003/05/02) 戻るã?タン用のBACK_GAMENID をã?引数に追åŠ?�—ますã?
287             * @og.rev 3.1.8.0 (2003/05/16) 戻るã?タン用のBACK_GAMENID の自動登録をå»?­¢しますã?
288             * @og.rev 4.0.0.0 (2005/01/31) getParameterRows() を使用するように変更
289             *
290             * @return      URLエンコードされたæ–?­—å?
291             */
292            private String getUrlEncode() {
293                    String[] dbkey = StringUtil.csv2Array( dbkeys );
294                    String[] key   = StringUtil.csv2Array( keys );
295    
296    //              int dbCount = (dbkey != null) ? dbkey.length : 0 ;
297    //              int count   = (key   != null) ? key.length   : 0 ;
298                    int dbCount = dbkey.length;
299                    int count   = key.length  ;
300    
301                    String[] allKey = new String[ dbCount + count ];
302                    String[] allval = new String[ dbCount + count ];
303    
304                    int[] rowNo = getParameterRows();               // 4.0.0 (2005/01/31)
305                    if( dbCount > 0 && dbkey[0] != null && dbkey[0].length() > 0 && rowNo.length > 0 ) {
306                            table = (DBTableModel)getObject( tableId );
307                            if( table != null ) {
308                                    for( int i=0; i<dbCount; i++ ) {
309                                            allKey[i] = dbkey[i];
310                                            allval[i] = table.getValue(rowNo[0],table.getColumnNo( dbkey[i] ));
311                                    }
312                            }
313                    }
314    
315                    if( count > 0 ) {
316                            for( int i=0; i<count; i++ ) {
317                                    allKey[i+dbCount] = key[i];
318                                    allval[i+dbCount] = vals[i];
319                            }
320                    }
321    
322                    return XHTMLTag.urlEncode( allKey,allval );
323            }
324    
325            /**
326             * 【TAG】転送å?URLを指定しますã?
327             *
328             * @og.tag 転送å?URLを指定しますã?
329             *
330             * @param       url 転送å?URL
331             */
332            public void setPage( final String url ) {
333                    page = getRequestParameter( url );
334            }
335    
336            /**
337             * 【TAG】DBキーをCSV 形式でセãƒ?ƒˆしますã?
338             *
339             * @og.tag
340             * URI の引数にセãƒ?ƒˆするキーã‚?CSV 形式でセãƒ?ƒˆしますã?
341             * ここのæŒ?®šã?,DBTableModel 上ã?ãƒ??タを取り込みますã?
342             *
343             * @param       key DBキー(CSV 形å¼?
344             */
345            public void setDbkeys( final String key ) {
346                    dbkeys = getRequestParameter( key ) ;
347            }
348    
349            /**
350             * 【TAG】キーã‚?CSV 形式でセãƒ?ƒˆしますã?
351             *
352             * @og.tag
353             * URI の引数にセãƒ?ƒˆするキーã‚?CSV 形式でセãƒ?ƒˆしますã?
354             *
355             * @param       key キー(CSV 形å¼?
356             */
357            public void setKeys( final String key ) {
358                    keys = getRequestParameter( key ) ;
359            }
360    
361            /**
362             * 【TAG】キーに対応するå?ã‚?CSV 形式でセãƒ?ƒˆしますã?
363             *
364             * @og.tag
365             * URI の引数にセãƒ?ƒˆする値ã‚?CSV 形式でセãƒ?ƒˆしますã?
366             * åˆ?§£方法ã?、CSV変数をå?にåˆ?§£してから、getRequestParameter で値を取得しますã?
367             * こうしなã�?�¨ãƒ??タ自身にカンマを持ってã�?‚‹場合にåˆ?§£をミスる為ですã?
368             *
369             * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用
370             *
371             * @param       val 値(CSV 形å¼?
372             */
373            public void setVals( final String val ) {
374                    vals = getCSVParameter( val );
375    
376                    // 先にåˆ?§£しなã�?�¨ãƒ??タ自身にカンマを持ってã�?‚‹場合にåˆ?§£をミスるã?
377            }
378    
379            /**
380             * 画面?©?¤とpage から、フォワードするU?²?¬を作æ?しますã?
381             * page ã�?null の場合ã?、index.jsp に転送されますã?
382             *
383             * @og.rev 3.5.4.9 (2004/02/25) 新規追åŠ?
384             * @og.rev 3.5.5.0 (2004/03/12) URLを求めるã?に、GUIInfo#getRealAddress() を使用するã€?
385             * @og.rev 4.0.0.0 (2005/01/31) GUIInfoの実アドレスのパラメータをè?慮するã€?
386             *
387             * @return      フォワードするU?²?¬(転送å?URL)
388             */
389            private String makeGamenLink() {
390                    if( page == null ) { page = "index.jsp"; }
391    
392                    if( gamenId == null || gamenId.length() == 0 ) { return page; }
393    
394                    GUIInfo guiInfo = getGUIInfo( gamenId );
395                    if( guiInfo == null ) { // 見つからなã�??合ã?、転送しなã�?
396                            LogWriter.log( "Forward[" + gamenId + "]先にはアクセス不可ですã?" );
397                            return page;
398                    }
399    
400                    String address = guiInfo.getRealAddress( page );
401                    String link = getRequestParameter( address );
402    
403                    // Ver 4.0.0 (2007/06/12) gamenId を使用する場合ã?、useRedirect = true をセãƒ?ƒˆ
404                    useRedirect = true;
405                    return link;
406            }
407    
408            /**
409             * 【TAG】gamenId 属æ?を登録しますã?
410             *
411             * @og.tag
412             * gamenId 属æ?は、画面IDをキーに、実アドレスを求めるã?に使用しますã?
413             * 画面IDが指定された場合ã?、実アドレスに変換する。指定されなã�??合ã?ã€?
414             * page 属æ?をそのままリãƒ?‚¤レクトアドレスとしますã?
415             * gamenId を指定したå?合ã?、このuseRedirect属æ?に関係なくã?Redirect されますã?
416             *
417             * @og.rev 3.5.4.9 (2004/02/25) 新規追åŠ?
418             *
419             * @param   id gamenId 属æ?
420             * @see         #setUseRedirect( String )
421             */
422            public void setGamenId( final String id ) {
423                    gamenId = nval( getRequestParameter( id ),gamenId );
424            }
425    
426            /**
427             * 【TAG】response.sendRedirect するかどã�?�‹[true/false]を指定しまã�?初期値:false)ã€?
428             *
429             * @og.tag
430             * useRedirect 属æ?は、URLの転送方式をæŒ?®šできますã?
431             * 通常は、pageContext.forward しますが、この属æ?に true ã‚?
432             * 設定すると、response.sendRedirect しますã?
433             * gamenId を指定したå?合ã?、この属æ?に関係なくã?Redirect されますã?
434             * 初期値は、false (forward) ですã?
435             *
436             * @og.rev 3.5.6.6 (2004/08/23) 新規追åŠ?
437             *
438             * @param   flag useRedirect 属æ? [false:forwrd/true:redirect]
439             * @see         #setGamenId( String )
440             */
441            public void setUseRedirect( final String flag ) {
442                    useRedirect = nval( getRequestParameter( flag ),useRedirect );
443            }
444    
445            /**
446             * 【TAG】サブミãƒ?ƒˆ先ã?æ–?›¸を表示させるフレーãƒ??またã?ウィンドウの名前を指定しますã?
447             *
448             * @og.tag サブミãƒ?ƒˆ先ã?フレーãƒ?��(ターゲãƒ?ƒˆ属æ?)を設定しますã?
449             *
450             * @og.rev 3.8.0.4 (2005/08/08) 新規追åŠ?
451             *
452             * @param       flag サブミãƒ?ƒˆ先ã?æ–?›¸のフレーãƒ?��(ターゲãƒ?ƒˆ属æ?)
453             */
454            public void setTarget( final String flag ) {
455                    target = nval( getRequestParameter( flag ),target );
456            }
457    
458            /**
459             * 【TAG】ファイル転送時にファイル名ã?別名をæŒ?®šしまã�?初期値:null)ã€?
460             *
461             * @og.tag
462             * ファイルを転送するå?合に、オープンさせるファイル名をæŒ?®šしますã?
463             * æŒ?®šしなã�??合ã?、フォラード前に呼び出されたアドレスがそのまま使用されますã?
464             *
465             * @param   name ファイルå�?
466             */
467            public void setFilename( final String name ) {
468                    filename = nval( getRequestParameter( name ),filename );
469            }
470    
471            /**
472             * 【TAGã€?通常は使ã�?�¾せん)画面遷移を行わなã�?½¢式ã?登録方法を使用するかをæŒ?®šしますã?
473             *
474             * @og.tag
475             * 画面遷移なしã?登録を行うかどã�?�‹を指定しますã?
476             * trueが指定された場合ã?forwardタグでは、実際の画面遷移は行わずに、forward先ã?
477             * URLã‚?div id="noTransitionUrl">[URL]</div>の形でHTMLとして出力し、JavaScript側で
478             * 実際の画面遷移を発生させますã?target属æ?は<div id="noTransitionTarget">[TARGET]</div>で
479             * 出力されますã?
480             *
481             * こã?値は、og:headタグで設定å?、またã?前画面からの値を継承するためã€??常、この属æ?ではセãƒ?ƒˆしませんã€?
482             *
483             * @og.rev 4.3.3.0 (2008/10/01) 新規追åŠ?
484             * @og.rev 5.1.3.0 (2010/02/01) noTransition、ajaxSubmitのコントロールは、requestで行うã€?
485             *
486             * @param   noTrnstn 画面遷移を行わなã�?½¢式ã?登録方法を使用するã�?
487             */
488            public void setNoTransition( final String noTrnstn ) {
489    //              noTransition = nval( getRequestParameter( noTrnstn ), noTransition );
490                    setNoTransitionRequest( nval( getRequestParameter( noTrnstn ), isNoTransitionRequest() ) );
491            }
492    
493            /**
494             * 【TAGã€?通常は使ã�?�¾せん)ajaxを利用したsubmitを利用するかどã�?�‹を指定しますã?
495             *
496             * @og.tag
497             * ajaxを利用したSubmit処ç�?‚’行うかどã�?�‹を指定しますã?
498             * setNoTransitionをtrueにした場合と同様ã?処ç�?‚’行いますã?
499             * (forwardせずにURLをDIVタグで出力すã‚?
500             *
501             * こã?値は、og:headタグで設定å?、またã?前画面からの値を継承するためã€??常、この属æ?ではセãƒ?ƒˆしませんã€?
502             *
503             * @og.rev 4.3.8.0 (2009/08/01) 新規追åŠ?
504             * @og.rev 5.1.3.0 (2010/02/01) noTransition、ajaxSubmitのコントロールは、requestで行うã€?
505             *
506             * @param   ajaxSubmit ajaxを利用したsubmitを利用するかどã�?�‹
507             */
508            public void setUseAjaxSubmit( final String ajaxSubmit ) {
509    //              useAjaxSubmit = nval( getRequestParameter( ajaxSubmit ), useAjaxSubmit );
510                    setAjaxSubmitRequest( nval( getRequestParameter( ajaxSubmit ), isAjaxSubmitRequest() ) );
511            }
512    
513            /**
514             * 【TAGã€?通常は使ã�?�¾せん)useRedirect=true時に 日本語を含ã‚?»¢送å?(page)をバイナリ変換するときã?コード名[UTF-8/Windows-31J]など(初期値:null)
515             *
516             * @og.tag
517             * 日本語ファイル名を持つ URL ã‚?useRedirect で転送するå?合に、転送å?(page)をバイナリ変換しなã�?�¨、転送できなã�?‚±ースがありますã?
518             * こã?あたりã?、ブラウザにも依存するã?で、既存ã?処ç�?�«影響しなã�?§˜に、このパラメータを使用する場合ã?み
519             * 処ç�?‚’実行しますã?
520             * IEでの日本語ファイル転送で、うまくいかなã�??合ã?、暫定å?置ですã?
521             * IEの場合ã?、redirectEncode="UTF-8" で、日本語ファイルを転送できますã?
522             * ただしã?useRedirect=true時に filename 属æ?によるファイル名ã?書き換えå?ç�??できませんので、ご注意くã�?�•ã�??
523             * 初期値は、null で、バイナリエンコードしません。(互換性ありの状態ですã???
524             *
525             * @og.rev 5.6.5.0 (2013/06/07) 新規追åŠ?
526             *
527             * @param   redEnc URL ã‚?転送するå?合に、日本語を含ã‚?»¢送å?(page)をバイナリ変換するときã?コード名
528             */
529            public void setRedirectEncode( final String redEnc ) {
530                    redirectEncode = nval( getRequestParameter( redEnc ), redirectEncode );
531            }
532    
533            /**
534             * シリアライズ用のカスタãƒ?‚·リアライズ書き込みメソãƒ?ƒ‰
535             *
536             * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
537             * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
538             *
539             * @param       strm    ObjectOutputStreamオブジェクãƒ?
540             * @throws IOException  シリアライズに関する入出力エラーが発生したå?å�?
541             */
542            private void writeObject( final ObjectOutputStream strm ) throws IOException {
543                    strm.defaultWriteObject();
544            }
545    
546            /**
547             * シリアライズ用のカスタãƒ?‚·リアライズ読み込みメソãƒ?ƒ‰
548             *
549             * ここでは、transient 宣è¨?�•れたå†?ƒ¨変数のå†??初期化がå¿?¦�なフィールドã?み設定しますã?
550             *
551             * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
552             * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
553             *
554             * @param       strm    ObjectInputStreamオブジェクãƒ?
555             * @see #release2()
556             * @throws IOException  シリアライズに関する入出力エラーが発生したå?å�?
557             * @throws ClassNotFoundException       クラスを見つけることができなかったå?å�?
558             */
559            private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
560                    strm.defaultReadObject();
561            }
562    
563            /**
564             * こã?オブジェクトã?æ–?­—å?表現を返しますã?
565             * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
566             *
567             * @return こã?クラスのæ–?­—å?表現
568             */
569            @Override
570            public String toString() {
571                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
572                                    .println( "VERSION"             ,VERSION        )
573                                    .println( "tableId"             ,tableId        )
574                                    .println( "page"                ,page           )
575                                    .println( "keys"                ,keys           )
576                                    .println( "dbkeys"              ,dbkeys         )
577                                    .println( "vals"                ,vals           )
578                                    .println( "gamenId"             ,gamenId        )
579                                    .println( "useRedirect" ,useRedirect)
580                                    .println( "target"              ,target         )
581                                    .println( "filename"    ,filename       )
582                                    .println( "disposition"         ,disposition    )
583                                    .println( "noTransition"        ,noTransition   )
584                                    .println( "useAjaxSubmit"       ,useAjaxSubmit  )
585                                    .println( "redirectEncode"      ,redirectEncode )
586                                    .println( "Other..."    ,getAttributes().getAttribute() )
587                                    .fixForm().toString() ;
588            }
589    }