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.6.5.0 (2013/06/07)" ;
086    
087            private static final long serialVersionUID = 565020130607L ;
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             *
126             * @return      後続????
127             */
128            @Override
129            public int doEndTag() {
130                    debugPrint();           // 4.0.0 (2005/02/28)
131                    // noTransition = isNoTransitionRequest() || noTransition; // 4.3.3.0 (2008/10/01) 追?
132    //              noTransition = isNoTransitionSession() || noTransition; // 4.3.8.0 (2009/08/01) メソ?名変更
133    //              useAjaxSubmit    = isAjaxSubmitSession() || useAjaxSubmit; // 4.3.8.0 (2009/08/01) 追?
134                    noTransition = isNoTransitionRequest(); // 5.1.3.0 (2010/02/01)
135                    useAjaxSubmit = isAjaxSubmitRequest(); // 5.1.3.0 (2010/02/01)
136    
137                    String urlEnc = getUrlEncode();
138                    String fwdUrl = makeGamenLink();                // 3.5.4.9 (2004/02/25)
139    
140                    HttpServletResponse response = (HttpServletResponse)pageContext.getResponse();
141                    try {
142                            String url = response.encodeRedirectURL( fwdUrl );      // 3.5.4.9 (2004/02/25)
143    
144                            if( filename != null ) {
145                                    // 5.1.6.0 (2010/05/01) IE以外?、MIMEエンコードする?(RFC2231に従う)
146                                    if( ( (HttpServletRequest)pageContext.getRequest() ).getHeader( "User-Agent" ).indexOf( "MSIE" ) == -1 ) {
147                                            filename = MimeUtility.encodeWord( filename, "UTF-8", "B" );
148                                    }
149                                    else {
150                                            // 5.3.8.0 (2011/08/01) IEの場合?URLエンコードすると途中で?るた?IE7のバグ)、Shift_JIS(WIndows-31J)で直接?する?
151    //                                      filename = StringUtil.urlEncode( filename );
152                                            filename = new String( filename.getBytes("Windows-31J"), "ISO-8859-1" );
153                                    }
154                                    (response).setHeader( "Content-Disposition",disposition + "; filename=\"" + filename + "\"" );
155                            }
156                            // 5.1.7.0 (2010/06/01) 画面IDをパラメーターに付加する?
157                            // 5.1.8.0 (2010/07/01) httpが指定されて?場合に、?身の画面IDが付加されるバグを修正
158                            else {
159    //                              if( page.endsWith( ".jsp" ) ) {
160                                    if( !page.startsWith( "http" ) && page.endsWith( ".jsp" ) ) {
161                                            if( keys == null || keys.length() == 0 || ( "," + keys + "," ).indexOf( ",GAMENID," ) < 0 ) {
162                                                    if( gamenId != null && gamenId.length() > 0 ) {
163                                                            url = XHTMLTag.addUrlEncode( url, "GAMENID=" + gamenId );
164                                                    }
165                                                    // useRedirect=trueでGAMENIDを指定せず?../GF9100/index.jsp等と書かれて?場合?対?
166                                                    else if( !useRedirect ) {
167                                                            url = XHTMLTag.addUrlEncode( url, "GAMENID=" + getGUIInfoAttri( "KEY" ) );
168                                                    }
169                                            }
170                                    }
171                            }
172    
173                            // 3.5.6.6 (2004/08/23) useRedirect 属?を追?
174                            String url2 = XHTMLTag.addUrlEncode( url , urlEnc );
175                            // 4.3.3.0 (2008/10/01) 追?
176                            // if( noTransition ) {
177                            if( noTransition || useAjaxSubmit ) { // 4.3.8.0 (2009/08/01) useAjaxSubmitと共用
178                                    // 5.0.0.4 (2009/10/01)
179                                    if( noTransition ) {
180                                            int selRow = nval( getRequestValue( "SEL_ROW" ),-1 );
181                                            if( selRow > 0 ) {
182                                                    url2 = XHTMLTag.addUrlEncode( url2, "SEL_ROW=" + selRow );
183                                            }
184                                    }
185                                    jspPrint( "<div id=\"noTransitionUrl\">" + url2 + "</div>" );
186                                    jspPrint( "<div id=\"noTransitionTarget\">" + target + "</div>" );
187                            }
188                            // 3.8.0.4 (2005/08/08) target 属?を追?ます?
189    //                      else if( target != null ) {
190                            else if( target != null && target.length() > 0 ) {
191                                    // 4.3.7.1 (2009/06/08)
192                                    String src = null;
193                                    if( target.startsWith( "_b" ) ) { // "_blank"
194                                            src = "window.open(\"" + url2 + "\", \"_blank\") ";
195                                    }
196                                    else {
197                                            String frameTop = "";
198                                            if( target.indexOf('.') < 0 ) { frameTop = "top."; }
199                                            src = frameTop + target + ".location.href=\"" + url2 + "\"" + HybsSystem.CR;
200                                    }
201    //                              String script = "<script language=\"JavaScript\" ><!-- " + HybsSystem.CR
202                                    String script = "<script type=\"text/javascript\" ><!-- " + HybsSystem.CR
203                                                                    + src + HybsSystem.CR
204                                                            + "// --></script>" ;
205                                    jspPrint( script );
206                            }
207                            else if( useRedirect ) {
208                                    // 5.6.5.0 (2013/06/07) redirectEncode 属?追?
209                                    if( redirectEncode != null ) {
210                                            url2 = new String( url2.getBytes( redirectEncode ), "ISO-8859-1" );
211                                    }
212                                    response.sendRedirect( url2  );
213                            }
214                            else {
215                                    pageContext.forward( url2 );
216                            }
217                    } catch(IOException ex) {
218                            String errMsg = "フォワー?リ?レクトでIOエラーが発生しました?
219                                                                    + HybsSystem.CR
220                                                                    + fwdUrl + "?" + urlEnc ;
221                            throw new HybsSystemException( errMsg,ex );             // 3.5.5.4 (2004/04/15) 引数の並び?更
222                    } catch( ServletException ex) {
223                            String errMsg = "フォワー?リ?レクトでServletエラーが発生しました?
224                                                                    + HybsSystem.CR
225                                                                    + fwdUrl + "?" + urlEnc ;
226                            throw new HybsSystemException( errMsg,ex );             // 3.5.5.4 (2004/04/15) 引数の並び?更
227                    }
228    
229                    // 3.0.1.3 (2003/03/11) forward で直接転送した?合?整合?を取る為の対応?
230                    // 5.1.7.0 (2010/06/01) 遷移先がJSP以外?場合?、フォワード?ージのキャ?ュをしな??
231                    if( fwdUrl != null && fwdUrl.endsWith( ".jsp" ) ) {
232                            setSessionAttribute( HybsSystem.FORWARD_PAGE_KEY, fwdUrl );     // 3.5.4.9 (2004/02/25)
233                    }
234    
235                    return(SKIP_PAGE);              // ペ?ジの残りの処?行わな??
236            }
237    
238            /**
239             * タグリブオブジェクトをリリースします?
240             * キャ?ュされて再利用される?で、フィールド?初期設定を行います?
241             *
242             * @og.rev 2.0.0.4 (2002/09/27) カスタ?グの release() メソ?を?追?
243             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応?release2() ?doEndTag()で呼ぶ?
244             * @og.rev 3.5.4.9 (2004/02/25) 画面ID属?(gamenId)を追?
245             * @og.rev 3.8.5.0 (2006/03/06) filename 属?を追?ます?
246             * @og.rev 4.3.3.0 (2008/10/01) noTransition 属?を追?ます?
247             * @og.rev 5.6.5.0 (2013/06/07) redirectEncode 属?を追?ます?
248             *
249             */
250            @Override
251            protected void release2() {
252                    super.release2();
253                    tableId         = HybsSystem.TBL_MDL_KEY;
254                    page            = null;
255                    keys            = null;
256                    dbkeys          = null;
257                    vals            = null;
258                    table           = null;
259                    gamenId         = null;
260                    useRedirect = false;    // 3.5.6.6 (2004/08/23) 追?
261                    target          = null;         // 3.8.0.4 (2005/08/08) 追?
262                    filename        = null;
263                    noTransition= false;    // 4.3.3.0 (2008/10/01) 追?
264                    useAjaxSubmit           = false;        // 4.3.8.0 (2009/08/01) 追?
265                    redirectEncode  = null;                 // 5.6.5.0 (2013/06/07) 追?
266            }
267    
268            /**
269             * keys 属? を?に、request??より values の値を取り込??
270             *
271             * keys属?は キー??がカンマ区?になって?為,ばらして
272             * values属?の配?に?づつ設定して?ます?
273             *
274             * @og.rev 3.1.7.0 (2003/05/02) 戻る?タン用のBACK_GAMENID を?引数に追?ます?
275             * @og.rev 3.1.8.0 (2003/05/16) 戻る?タン用のBACK_GAMENID の自動登録を?します?
276             * @og.rev 4.0.0.0 (2005/01/31) getParameterRows() を使用するように変更
277             *
278             * @return      URLエンコードされた??
279             */
280            private String getUrlEncode() {
281                    String[] dbkey = StringUtil.csv2Array( dbkeys );
282                    String[] key   = StringUtil.csv2Array( keys );
283    
284    //              int dbCount = (dbkey != null) ? dbkey.length : 0 ;
285    //              int count   = (key   != null) ? key.length   : 0 ;
286                    int dbCount = dbkey.length;
287                    int count   = key.length  ;
288    
289                    String[] allKey = new String[ dbCount + count ];
290                    String[] allval = new String[ dbCount + count ];
291    
292                    int[] rowNo = getParameterRows();               // 4.0.0 (2005/01/31)
293                    if( dbCount > 0 && dbkey[0] != null && dbkey[0].length() > 0 && rowNo.length > 0 ) {
294                            table = (DBTableModel)getObject( tableId );
295                            if( table != null ) {
296                                    for( int i=0; i<dbCount; i++ ) {
297                                            allKey[i] = dbkey[i];
298                                            allval[i] = table.getValue(rowNo[0],table.getColumnNo( dbkey[i] ));
299                                    }
300                            }
301                    }
302    
303                    if( count > 0 ) {
304                            for( int i=0; i<count; i++ ) {
305                                    allKey[i+dbCount] = key[i];
306                                    allval[i+dbCount] = vals[i];
307                            }
308                    }
309    
310                    return XHTMLTag.urlEncode( allKey,allval );
311            }
312    
313            /**
314             * 【TAG】転送?URLを指定します?
315             *
316             * @og.tag 転送?URLを指定します?
317             *
318             * @param       url 転送?URL
319             */
320            public void setPage( final String url ) {
321                    page = getRequestParameter( url );
322            }
323    
324            /**
325             * 【TAG】DBキーをCSV 形式でセ?します?
326             *
327             * @og.tag
328             * URI の引数にセ?するキー?CSV 形式でセ?します?
329             * ここの??,DBTableModel 上???タを取り込みます?
330             *
331             * @param       key DBキー(CSV 形?
332             */
333            public void setDbkeys( final String key ) {
334                    dbkeys = getRequestParameter( key ) ;
335            }
336    
337            /**
338             * 【TAG】キー?CSV 形式でセ?します?
339             *
340             * @og.tag
341             * URI の引数にセ?するキー?CSV 形式でセ?します?
342             *
343             * @og.rev 5.7.0.0 (2013/11/3) 空白?削除
344             * 
345             * @param       key キー(CSV 形?
346             */
347            public void setKeys( final String key ) {
348    //              keys = getRequestParameter( key ) ;
349                    keys = StringUtil.deleteWhitespace( getRequestParameter( key ) );
350            }
351    
352            /**
353             * 【TAG】キーに対応する??CSV 形式でセ?します?
354             *
355             * @og.tag
356             * URI の引数にセ?する値?CSV 形式でセ?します?
357             * ?方法?、CSV変数を?に?してから、getRequestParameter で値を取得します?
358             * こうしな???タ自身にカンマを持って?場合に?をミスる為です?
359             *
360             * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用
361             *
362             * @param       val 値(CSV 形?
363             */
364            public void setVals( final String val ) {
365                    vals = getCSVParameter( val );
366    
367                    // 先に?しな???タ自身にカンマを持って?場合に?をミスる?
368            }
369    
370            /**
371             * 画面??とpage から、フォワードするU??を作?します?
372             * page ?null の場合?、index.jsp に転送されます?
373             *
374             * @og.rev 3.5.4.9 (2004/02/25) 新規追?
375             * @og.rev 3.5.5.0 (2004/03/12) URLを求める?に、GUIInfo#getRealAddress() を使用する?
376             * @og.rev 4.0.0.0 (2005/01/31) GUIInfoの実アドレスのパラメータを?慮する?
377             *
378             * @return      フォワードするU??(転送?URL)
379             */
380            private String makeGamenLink() {
381                    if( page == null ) { page = "index.jsp"; }
382    
383                    if( gamenId == null || gamenId.length() == 0 ) { return page; }
384    
385                    GUIInfo guiInfo = getGUIInfo( gamenId );
386                    if( guiInfo == null ) { // 見つからな??合?、転送しな?
387                            LogWriter.log( "Forward[" + gamenId + "]先にはアクセス不可です?" );
388                            return page;
389                    }
390    
391                    String address = guiInfo.getRealAddress( page );
392                    String link = getRequestParameter( address );
393    
394                    // Ver 4.0.0 (2007/06/12) gamenId を使用する場合?、useRedirect = true をセ?
395                    useRedirect = true;
396                    return link;
397            }
398    
399            /**
400             * 【TAG】gamenId 属?を登録します?
401             *
402             * @og.tag
403             * gamenId 属?は、画面IDをキーに、実アドレスを求める?に使用します?
404             * 画面IDが指定された場合?、実アドレスに変換する。指定されな??合??
405             * page 属?をそのままリ?レクトアドレスとします?
406             * gamenId を指定した?合?、このuseRedirect属?に関係なく?Redirect されます?
407             *
408             * @og.rev 3.5.4.9 (2004/02/25) 新規追?
409             *
410             * @param   id gamenId 属?
411             * @see         #setUseRedirect( String )
412             */
413            public void setGamenId( final String id ) {
414                    gamenId = nval( getRequestParameter( id ),gamenId );
415            }
416    
417            /**
418             * 【TAG】response.sendRedirect するかど?[true/false]を指定しま?初期値:false)?
419             *
420             * @og.tag
421             * useRedirect 属?は、URLの転送方式を?できます?
422             * 通常は、pageContext.forward しますが、この属?に true ?
423             * 設定すると、response.sendRedirect します?
424             * gamenId を指定した?合?、この属?に関係なく?Redirect されます?
425             * 初期値は、false (forward) です?
426             *
427             * @og.rev 3.5.6.6 (2004/08/23) 新規追?
428             *
429             * @param   flag useRedirect 属? [false:forwrd/true:redirect]
430             * @see         #setGamenId( String )
431             */
432            public void setUseRedirect( final String flag ) {
433                    useRedirect = nval( getRequestParameter( flag ),useRedirect );
434            }
435    
436            /**
437             * 【TAG】サブミ?先??を表示させるフレー??また?ウィンドウの名前を指定します?
438             *
439             * @og.tag サブミ?先?フレー?(ターゲ?属?)を設定します?
440             *
441             * @og.rev 3.8.0.4 (2005/08/08) 新規追?
442             *
443             * @param       flag サブミ?先??のフレー?(ターゲ?属?)
444             */
445            public void setTarget( final String flag ) {
446                    target = nval( getRequestParameter( flag ),target );
447            }
448    
449            /**
450             * 【TAG】ファイル転送時にファイル名?別名を?しま?初期値:null)?
451             *
452             * @og.tag
453             * ファイルを転送する?合に、オープンさせるファイル名を?します?
454             * ?しな??合?、フォラード前に呼び出されたアドレスがそのまま使用されます?
455             *
456             * @param   name ファイル?
457             */
458            public void setFilename( final String name ) {
459                    filename = nval( getRequestParameter( name ),filename );
460            }
461    
462            /**
463             * 【TAG?通常は使?せん)画面遷移を行わな?式?登録方法を使用するかを?します?
464             *
465             * @og.tag
466             * 画面遷移なし?登録を行うかど?を指定します?
467             * trueが指定された場合?forwardタグでは、実際の画面遷移は行わずに、forward先?
468             * URL?div id="noTransitionUrl">[URL]</div>の形でHTMLとして出力し、JavaScript側で
469             * 実際の画面遷移を発生させます?target属?は<div id="noTransitionTarget">[TARGET]</div>で
470             * 出力されます?
471             *
472             * こ?値は、og:headタグで設定?、また?前画面からの値を継承するため??常、この属?ではセ?しません?
473             *
474             * @og.rev 4.3.3.0 (2008/10/01) 新規追?
475             * @og.rev 5.1.3.0 (2010/02/01) noTransition、ajaxSubmitのコントロールは、requestで行う?
476             *
477             * @param   noTrnstn 画面遷移を行わな?式?登録方法を使用する?
478             */
479            public void setNoTransition( final String noTrnstn ) {
480    //              noTransition = nval( getRequestParameter( noTrnstn ), noTransition );
481                    setNoTransitionRequest( nval( getRequestParameter( noTrnstn ), isNoTransitionRequest() ) );
482            }
483    
484            /**
485             * 【TAG?通常は使?せん)ajaxを利用したsubmitを利用するかど?を指定します?
486             *
487             * @og.tag
488             * ajaxを利用したSubmit処?行うかど?を指定します?
489             * setNoTransitionをtrueにした場合と同様?処?行います?
490             * (forwardせずにURLをDIVタグで出力す?
491             *
492             * こ?値は、og:headタグで設定?、また?前画面からの値を継承するため??常、この属?ではセ?しません?
493             *
494             * @og.rev 4.3.8.0 (2009/08/01) 新規追?
495             * @og.rev 5.1.3.0 (2010/02/01) noTransition、ajaxSubmitのコントロールは、requestで行う?
496             *
497             * @param   ajaxSubmit ajaxを利用したsubmitを利用するかど?
498             */
499            public void setUseAjaxSubmit( final String ajaxSubmit ) {
500    //              useAjaxSubmit = nval( getRequestParameter( ajaxSubmit ), useAjaxSubmit );
501                    setAjaxSubmitRequest( nval( getRequestParameter( ajaxSubmit ), isAjaxSubmitRequest() ) );
502            }
503    
504            /**
505             * 【TAG?通常は使?せん)useRedirect=true時に 日本語を含?送?(page)をバイナリ変換するとき?コード名[UTF-8/Windows-31J]など(初期値:null)
506             *
507             * @og.tag
508             * 日本語ファイル名を持つ URL ?useRedirect で転送する?合に、転送?(page)をバイナリ変換しな?、転送できな?ースがあります?
509             * こ?あたり?、ブラウザにも依存する?で、既存?処?影響しな?に、このパラメータを使用する場合?み
510             * 処?実行します?
511             * IEでの日本語ファイル転送で、うまくいかな??合?、暫定?置です?
512             * IEの場合?、redirectEncode="UTF-8" で、日本語ファイルを転送できます?
513             * ただし?useRedirect=true時に filename 属?によるファイル名?書き換え???できませんので、ご注意く???
514             * 初期値は、null で、バイナリエンコードしません。(互換性ありの状態です???
515             *
516             * @og.rev 5.6.5.0 (2013/06/07) 新規追?
517             *
518             * @param   redEnc URL ?転送する?合に、日本語を含?送?(page)をバイナリ変換するとき?コード名
519             */
520            public void setRedirectEncode( final String redEnc ) {
521                    redirectEncode = nval( getRequestParameter( redEnc ), redirectEncode );
522            }
523    
524            /**
525             * シリアライズ用のカスタ?リアライズ書き込みメソ?
526             *
527             * @og.rev 4.0.0.0 (2006/09/31) 新規追?
528             * @serialData
529             *
530             * @param       strm    ObjectOutputStreamオブジェク?
531             */
532            private void writeObject( final ObjectOutputStream strm ) throws IOException {
533                    strm.defaultWriteObject();
534            }
535    
536            /**
537             * シリアライズ用のカスタ?リアライズ読み込みメソ?
538             *
539             * ここでは、transient 宣?れた?変数の??初期化が?なフィールド?み設定します?
540             *
541             * @og.rev 4.0.0.0 (2006/09/31) 新規追?
542             * @serialData
543             *
544             * @param       strm    ObjectInputStreamオブジェク?
545             * @see #release2()
546             */
547            private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
548                    strm.defaultReadObject();
549            }
550    
551            /**
552             * こ?オブジェクト???表現を返します?
553             * 基本???目?使用します?
554             *
555             * @return こ?クラスの??表現
556             */
557            @Override
558            public String toString() {
559                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
560                                    .println( "VERSION"             ,VERSION        )
561                                    .println( "tableId"             ,tableId        )
562                                    .println( "page"                ,page           )
563                                    .println( "keys"                ,keys           )
564                                    .println( "dbkeys"              ,dbkeys         )
565                                    .println( "vals"                ,vals           )
566                                    .println( "gamenId"             ,gamenId        )
567                                    .println( "useRedirect" ,useRedirect)
568                                    .println( "target"              ,target         )
569                                    .println( "filename"    ,filename       )
570                                    .println( "disposition"         ,disposition    )
571                                    .println( "noTransition"        ,noTransition   )
572                                    .println( "useAjaxSubmit"       ,useAjaxSubmit  )
573                                    .println( "redirectEncode"      ,redirectEncode )
574                                    .println( "Other..."    ,getAttributes().getAttribute() )
575                                    .fixForm().toString() ;
576            }
577    }