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