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