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.security.HybsCryptography; 030import org.opengion.fukurou.util.LogWriter; 031import org.opengion.fukurou.util.StringUtil; 032import org.opengion.fukurou.util.XHTMLTag; 033import org.opengion.hayabusa.common.HybsSystem; 034import org.opengion.hayabusa.common.HybsSystemException; 035import org.opengion.hayabusa.db.DBTableModel; 036import org.opengion.hayabusa.resource.GUIInfo; 037 038/** 039 * 制御を別の画面にフォワードする場合に使用するタグです(通常は、entry.jsp で使用します)。 040 * 041 * フォワード時に、指定の引数をセットできます。 042 * 043 * @og.formSample 044 * ●形式:<og:forward page="…" gamenId="[…]" /> 045 * ●body:なし 046 * 047 * ●Tag定義: 048 * <og:forward 049 * gamenId 【TAG】gamenId 属性を登録します 050 * page ○【TAG】転送先URLを指定します(必須)。 051 * keys 【TAG】キーを CSV 形式でセットします 052 * vals 【TAG】キーに対応する値を CSV 形式でセットします 053 * dbkeys 【TAG】DBキーをCSV 形式でセットします 054 * scope 【TAG】キャッシュする場合のスコープ[request/page/session/applicaton]を指定します(初期値:session) 055 * useRedirect 【TAG】response.sendRedirect するかどうか[true/false]を指定します(初期値:false) 056 * target 【TAG】サブミット先の文書を表示させるフレーム、またはウィンドウの名前を指定します 057 * filename 【TAG】ファイル転送時にファイル名の別名を指定します(初期値:null) 058 * noTransition 【TAG】(通常は使いません)画面遷移を行わない形式の登録方法を使用するかを指定します 059 * useAjaxSubmit 【TAG】(通常は使いません)ajaxを利用したsubmitを利用するかどうかを指定します 060 * redirectEncode 【TAG】(通常は使いません)useRedirect=true時に 日本語を含む転送先(page)をバイナリ変換するときのコード名[UTF-8/Windows-31J]など(初期値:null) 061 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 062 * /> 063 * 064 * ●使用例 065 * <og:forward 066 * page = "転送先URLを指定します(必須)。" 067 * dbkeys = "DBキーをCSV 形式でセットします。" 068 * keys = "キーを CSV 形式でセットします。" 069 * vals = "キーに対応する値を CSV 形式でセットします。" 070 * scope = "キャッシュする場合のスコープ(request,page,session,applicaton)を指定します(初期値:session)。" 071 * gamenId = "gamenId 属性を登録します。" 072 * useRedirect = "useRedirect 属性を登録します。" 073 * filename = "ファイル転送時にファイル名を指定する場合に設定します。" 074 * target = "taregt 属性を登録します。" 075 * noTransition = "実際にforwardせずに、id="forwardUrl"属性のbody部分に遷移先のURLを出力します。(画面遷移なしモード時に使用します)" 076 * /> 077 * 078 * @og.group 画面制御 079 * 080 * @version 4.0 081 * @author Kazuhiko Hasegawa 082 * @since JDK5.0, 083 */ 084public class ForwardTag extends CommonTagSupport { 085 //* このプログラムのVERSION文字列を設定します。 {@value} */ 086 private static final String VERSION = "5.7.4.1 (2014/03/14)" ; 087 088 private static final long serialVersionUID = 574120140314L ; 089 090 private transient DBTableModel table = null; 091 private String tableId = HybsSystem.TBL_MDL_KEY; 092 private String page = null; 093 private String keys = null; 094 private String dbkeys = null; 095 private String[] vals = null; 096 private String gamenId = null; // 3.5.4.9 (2004/02/25) 追加 097 private boolean useRedirect = false; // 3.5.6.6 (2004/08/23) 追加 098 private String target = null; // 3.8.0.4 (2005/08/08) 追加 099 private String filename = null; // 4.0.0 (2005/11/30) 追加 100// private static final String disposition = "inline"; // 固定 101 private String disposition = "inline"; // 5.10.12.0 (2019/06/03) 102 private boolean noTransition= false; // 4.3.3.0 (2008/10/01) 追加 103 private boolean useAjaxSubmit = false; // 4.3.8.0 (2009/08/01) 追加 104// private boolean useEncodeRedirect = true; // 5.6.5.0 (2013/06/07) 追加、即廃止 105 private String redirectEncode = null; // 5.6.5.0 (2013/06/07) 追加 106 // urlCheck関係 5.10.11.0 (2019/05/03) 追加 107 private boolean useURLCheck = HybsSystem.sysBool( "LINK_URL_CHECK" ); 108 private long urlCheckTime= 1000*60*60*24;// 5.10.11.0 (2019/05/03) 109 private String urlCheckCrypt = HybsSystem.sys( "URL_CHECK_CRYPT" ); 110 private boolean useForceEnc = false; // 5.10.15.3 (2019/09/27) 強制URLエンコード用 111 112 /** 113 * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。 114 * 115 * @og.rev 2.1.0.0 (2002/10/11) 戻り値の先頭の "?" を追加しないように変更。 116 * @og.rev 3.0.1.3 (2003/03/11) 直接転送した場合の整合性を取る為の対応。 117 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 118 * @og.rev 3.1.2.0 (2003/04/07) ソースコード中の固定値を、定義ファイルを使用するように変更する。 119 * @og.rev 3.5.4.9 (2004/02/25) gamenId を指定して、フォワードできるようにします。 120 * @og.rev 3.5.6.6 (2004/08/23) useRedirect 属性を追加します。 121 * @og.rev 4.3.3.0 (2008/10/01) noTransition 属性を追加します。 122 * @og.rev 4.3.7.1 (2009/06/08) target属性に絶対パス及び"_"で始まる予約語を指定できるようにします。 123 * @og.rev 4.3.8.0 (2009/08/01) useAjaxSubmit対応、noTransition値取得メソッド名変更 124 * @og.rev 5.0.0.4 (2009/10/01) 画面遷移なし登録で戻った際に最終行が選択されるバグを修正 125 * @og.rev 5.1.3.0 (2010/02/01) noTransition、ajaxSubmitのコントロールは、requestで行う。 126 * @og.rev 5.1.6.0 (2010/05/01) IE以外は、MIMEエンコードする。(RFC2231に従う) 127 * @og.rev 5.1.7.0 (2010/06/01) 画面IDをパラメーターに付加する。 128 * @og.rev 5.1.7.0 (2010/06/01) 遷移先がJSP以外の場合は、フォワードページのキャッシュをしない。 129 * @og.rev 5.1.8.0 (2010/07/01) httpが指定されていた場合に、自身の画面IDが付加されるバグを修正 130 * @og.rev 5.3.8.0 (2011/08/01) ファイル名指定でIEの場合、URLエンコードすると途中で切れるため(IE7のバグ)、Shift_JIS(WIndows-31J)で直接指定する。 131 * @og.rev 5.6.5.0 (2013/06/07) redirectEncode 属性を追加します。 132 * @og.rev 5.7.4.1 (2014/03/14) 日本語ファイル名が正しく処理できない件を修正(IE11のMSIE関連) 133 * @og.rev 5.9.29.0 (2018/01/30) Edge,safariの日本語ファイル名対応(RFC6266方式を併記) 134 * @og.rev 5.10.11.0 (2019/05/03) URLチェック対応を追加 135 * @og.rev 5.10.12.0 (2019/06/03) content-typeを追加 136 * 137 * @return 後続処理の指示 138 */ 139 @Override 140 public int doEndTag() { 141 debugPrint(); // 4.0.0 (2005/02/28) 142 // noTransition = isNoTransitionRequest() || noTransition; // 4.3.3.0 (2008/10/01) 追加 143// noTransition = isNoTransitionSession() || noTransition; // 4.3.8.0 (2009/08/01) メソッド名変更 144// useAjaxSubmit = isAjaxSubmitSession() || useAjaxSubmit; // 4.3.8.0 (2009/08/01) 追加 145 noTransition = isNoTransitionRequest(); // 5.1.3.0 (2010/02/01) 146 useAjaxSubmit = isAjaxSubmitRequest(); // 5.1.3.0 (2010/02/01) 147 148 String urlEnc = getUrlEncode(); 149 String fwdUrl = makeGamenLink(); // 3.5.4.9 (2004/02/25) 150 151 HttpServletResponse response = (HttpServletResponse)pageContext.getResponse(); 152 try { 153 String url = response.encodeRedirectURL( fwdUrl ); // 3.5.4.9 (2004/02/25) 154 155 if( filename != null ) { 156 // 5.1.6.0 (2010/05/01) IE以外は、MIMEエンコードする。(RFC2231に従う) 157// if( ( (HttpServletRequest)pageContext.getRequest() ).getHeader( "User-Agent" ).indexOf( "MSIE" ) == -1 ) { 158// filename = MimeUtility.encodeWord( filename, "UTF-8", "B" ); 159// } 160// else { 161// // 5.3.8.0 (2011/08/01) IEの場合、URLエンコードすると途中で切れるため(IE7のバグ)、Shift_JIS(WIndows-31J)で直接指定する。 162//// filename = StringUtil.urlEncode( filename ); 163// filename = new String( filename.getBytes("Windows-31J"), "ISO-8859-1" ); 164// } 165 String newFilename = filename; 166 String newFilenameEnc = StringUtil.urlEncode( newFilename ); // 5.9.29.0 (2018/02/02) 167 168 // 5.7.4.1 (2014/03/14) 日本語ファイル名が正しく処理できない件を修正(IE11のMSIE関連) 169 // 条件を反転させた上でIE11対応を行う 170 String reqHeader = ((HttpServletRequest)pageContext.getRequest()).getHeader( "User-Agent" ); 171 if( reqHeader.indexOf( "MSIE" ) >= 0 || reqHeader.indexOf( "Trident" ) >= 0 ) { 172 filename = new String( filename.getBytes("Windows-31J"), "ISO-8859-1" ); 173 } 174 else { 175 filename = MimeUtility.encodeWord( filename, "UTF-8", "B" ); 176 } 177 178 (response).setContentType( "application/octet-stream" ); // 5.10.12.0 (2019/06/3) 179 180// (response).setHeader( "Content-Disposition",disposition + "; filename=\"" + filename + "\"" ); 181 (response).setHeader( "Content-disposition",disposition + "; filename=\"" + newFilename + "\"; " 182 + "filename*=UTF-8''" + newFilenameEnc ); // 5.9.29.0 (2018/02/02) RFC6266方式を併記 183 } 184 // 5.1.7.0 (2010/06/01) 画面IDをパラメーターに付加する。 185 // 5.1.8.0 (2010/07/01) httpが指定されていた場合に、自身の画面IDが付加されるバグを修正 186 else { 187// if( page.endsWith( ".jsp" ) ) { 188 if( !page.startsWith( "http" ) && page.endsWith( ".jsp" ) ) { 189 if( keys == null || keys.length() == 0 || ( "," + keys + "," ).indexOf( ",GAMENID," ) < 0 ) { 190 if( gamenId != null && gamenId.length() > 0 ) { 191 url = XHTMLTag.addUrlEncode( url, "GAMENID=" + gamenId ); 192 } 193 // useRedirect=trueでGAMENIDを指定せず、../GF9100/index.jsp等と書かれている場合の対応 194 else if( !useRedirect ) { 195 url = XHTMLTag.addUrlEncode( url, "GAMENID=" + getGUIInfoAttri( "KEY" ) ); 196 } 197 } 198 } 199 } 200 201 // 3.5.6.6 (2004/08/23) useRedirect 属性を追加 202 String url2 = XHTMLTag.addUrlEncode( url , urlEnc ); 203 // 4.3.3.0 (2008/10/01) 追加 204 // if( noTransition ) { 205 if( noTransition || useAjaxSubmit ) { // 4.3.8.0 (2009/08/01) useAjaxSubmitと共用 206 // 5.0.0.4 (2009/10/01) 207 if( noTransition ) { 208 int selRow = nval( getRequestValue( "SEL_ROW" ),-1 ); 209 if( selRow > 0 ) { 210 url2 = XHTMLTag.addUrlEncode( url2, "SEL_ROW=" + selRow ); 211 } 212 } 213 if( useURLCheck ) { // 5.10.11.0 (2019/05/03) useURLCheck追加 214 url2 = addURLCheck(url2); 215 } 216 jspPrint( "<div id=\"noTransitionUrl\">" + url2 + "</div>" ); 217 jspPrint( "<div id=\"noTransitionTarget\">" + target + "</div>" ); 218 } 219 220 // 3.8.0.4 (2005/08/08) target 属性を追加します。 221// else if( target != null ) { 222 else if( target != null && target.length() > 0 ) { 223 // 4.3.7.1 (2009/06/08) 224 String src = null; 225 if( useURLCheck ) { // 5.10.11.0 (2019/05/03) useURLCheck追加 226 url2 = addURLCheck(url2); 227 } 228 229 if( target.startsWith( "_b" ) ) { // "_blank" 230 src = "window.open(\"" + url2 + "\", \"_blank\") "; 231 } 232 else { 233 String frameTop = ""; 234 if( target.indexOf('.') < 0 ) { frameTop = "top."; } 235 src = frameTop + target + ".location.href=\"" + url2 + "\"" + HybsSystem.CR; 236 } 237// String script = "<script language=\"JavaScript\" ><!-- " + HybsSystem.CR 238 String script = "<script type=\"text/javascript\" ><!-- " + HybsSystem.CR 239 + src + HybsSystem.CR 240 + "// --></script>" ; 241 jspPrint( script ); 242 } 243 else if( useRedirect ) { 244 if( useURLCheck ) { // 5.10.11.0 (2019/05/03) useURLCheck追加 245 url2 = addURLCheck(url2); 246 } 247 // 5.6.5.0 (2013/06/07) redirectEncode 属性追加 248 if( redirectEncode != null ) { 249 url2 = new String( url2.getBytes( redirectEncode ), "ISO-8859-1" ); 250 } 251 response.sendRedirect( url2 ); 252 } 253 else { 254 pageContext.forward( url2 ); 255 } 256 } catch(IOException ex) { 257 String errMsg = "フォワード/リダイレクトでIOエラーが発生しました。" 258 + HybsSystem.CR 259 + fwdUrl + "?" + urlEnc ; 260 throw new HybsSystemException( errMsg,ex ); // 3.5.5.4 (2004/04/15) 引数の並び順変更 261 } catch( ServletException ex) { 262 String errMsg = "フォワード/リダイレクトでServletエラーが発生しました。" 263 + HybsSystem.CR 264 + fwdUrl + "?" + urlEnc ; 265 throw new HybsSystemException( errMsg,ex ); // 3.5.5.4 (2004/04/15) 引数の並び順変更 266 } 267 268 // 3.0.1.3 (2003/03/11) forward で直接転送した場合の整合性を取る為の対応。 269 // 5.1.7.0 (2010/06/01) 遷移先がJSP以外の場合は、フォワードページのキャッシュをしない。 270 if( fwdUrl != null && fwdUrl.endsWith( ".jsp" ) ) { 271 setSessionAttribute( HybsSystem.FORWARD_PAGE_KEY, fwdUrl ); // 3.5.4.9 (2004/02/25) 272 } 273 274 return(SKIP_PAGE); // ページの残りの処理を行わない。 275 } 276 277 /** 278 * タグリブオブジェクトをリリースします。 279 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 280 * 281 * @og.rev 2.0.0.4 (2002/09/27) カスタムタグの release() メソッドを、追加 282 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 283 * @og.rev 3.5.4.9 (2004/02/25) 画面ID属性(gamenId)を追加 284 * @og.rev 3.8.5.0 (2006/03/06) filename 属性を追加します。 285 * @og.rev 4.3.3.0 (2008/10/01) noTransition 属性を追加します。 286 * @og.rev 5.6.5.0 (2013/06/07) redirectEncode 属性を追加します。 287 * @og.rev 5.10.11.0 (2019/05/03) urlCheck対応 288 * @og.rev 5.10.12.0 (2019/06/03) disposition 289 * @og.rev 5.10.15.3 (2019/09/27) useForceEnc 290 * 291 */ 292 @Override 293 protected void release2() { 294 super.release2(); 295 tableId = HybsSystem.TBL_MDL_KEY; 296 page = null; 297 keys = null; 298 dbkeys = null; 299 vals = null; 300 table = null; 301 gamenId = null; 302 useRedirect = false; // 3.5.6.6 (2004/08/23) 追加 303 target = null; // 3.8.0.4 (2005/08/08) 追加 304 filename = null; 305 noTransition= false; // 4.3.3.0 (2008/10/01) 追加 306 useAjaxSubmit = false; // 4.3.8.0 (2009/08/01) 追加 307 redirectEncode = null; // 5.6.5.0 (2013/06/07) 追加 308 useURLCheck = HybsSystem.sysBool( "LINK_URL_CHECK" ); // 5.10.11.0 (2019/05/03) 309 disposition = "inline"; // 5.10.12.0 (2019/06/03) 310 useForceEnc = false; // 5.10.15.3 (2019/09/27) 311 } 312 313 /** 314 * keys 属性 を元に、request情報より values の値を取り込む。 315 * 316 * keys属性は キー情報がカンマ区切りになっている為,ばらして 317 * values属性の配列に一つづつ設定していきます。 318 * 319 * @og.rev 3.1.7.0 (2003/05/02) 戻るボタン用のBACK_GAMENID を、引数に追加します。 320 * @og.rev 3.1.8.0 (2003/05/16) 戻るボタン用のBACK_GAMENID の自動登録を廃止します。 321 * @og.rev 4.0.0.0 (2005/01/31) getParameterRows() を使用するように変更 322 * @og.rev 5.10.15.3 (2019/09/27) forceEnc対応 323 * 324 * @return URLエンコードされた文字列 325 */ 326 private String getUrlEncode() { 327 String[] dbkey = StringUtil.csv2Array( dbkeys ); 328 String[] key = StringUtil.csv2Array( keys ); 329 330// int dbCount = (dbkey != null) ? dbkey.length : 0 ; 331// int count = (key != null) ? key.length : 0 ; 332 int dbCount = dbkey.length; 333 int count = key.length ; 334 335 String[] allKey = new String[ dbCount + count ]; 336 String[] allval = new String[ dbCount + count ]; 337 338 int[] rowNo = getParameterRows(); // 4.0.0 (2005/01/31) 339 if( dbCount > 0 && dbkey[0] != null && dbkey[0].length() > 0 && rowNo.length > 0 ) { 340 table = (DBTableModel)getObject( tableId ); 341 if( table != null ) { 342 for( int i=0; i<dbCount; i++ ) { 343 allKey[i] = dbkey[i]; 344 allval[i] = table.getValue(rowNo[0],table.getColumnNo( dbkey[i] )); 345 } 346 } 347 } 348 349 if( count > 0 ) { 350 for( int i=0; i<count; i++ ) { 351 allKey[i+dbCount] = key[i]; 352 allval[i+dbCount] = vals[i]; 353 } 354 } 355 356// return XHTMLTag.urlEncode( allKey,allval ); 357 return XHTMLTag.urlEncode( allKey,allval,"&",useForceEnc ); // 5.10.15.3 (2019/09/27) 358 } 359 360 /** 361 * 【TAG】転送先URLを指定します。 362 * 363 * @og.tag 転送先URLを指定します。 364 * 365 * @param url 転送先URL 366 */ 367 public void setPage( final String url ) { 368 page = getRequestParameter( url ); 369 } 370 371 /** 372 * 【TAG】DBキーをCSV 形式でセットします。 373 * 374 * @og.tag 375 * URI の引数にセットするキーを CSV 形式でセットします。 376 * ここの指定は,DBTableModel 上のデータを取り込みます。 377 * 378 * @param key DBキー(CSV 形式) 379 */ 380 public void setDbkeys( final String key ) { 381 dbkeys = getRequestParameter( key ) ; 382 } 383 384 /** 385 * 【TAG】キーを CSV 形式でセットします。 386 * 387 * @og.tag 388 * URI の引数にセットするキーを CSV 形式でセットします。 389 * 390 * @param key キー(CSV 形式) 391 */ 392 public void setKeys( final String key ) { 393 keys = getRequestParameter( key ) ; 394 } 395 396 /** 397 * 【TAG】キーに対応する値を CSV 形式でセットします。 398 * 399 * @og.tag 400 * URI の引数にセットする値を CSV 形式でセットします。 401 * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 402 * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。 403 * 404 * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用 405 * 406 * @param val 値(CSV 形式) 407 */ 408 public void setVals( final String val ) { 409 vals = getCSVParameter( val ); 410 411 // 先に分解しないとデータ自身にカンマを持っている場合に分解をミスる。 412 } 413 414 /** 415 * 画面IDとpage から、フォワードするURLを作成します。 416 * page が null の場合は、index.jsp に転送されます。 417 * 418 * @og.rev 3.5.4.9 (2004/02/25) 新規追加 419 * @og.rev 3.5.5.0 (2004/03/12) URLを求めるのに、GUIInfo#getRealAddress() を使用する。 420 * @og.rev 4.0.0.0 (2005/01/31) GUIInfoの実アドレスのパラメータを考慮する。 421 * 422 * @return フォワードするURL(転送先URL) 423 */ 424 private String makeGamenLink() { 425 if( page == null ) { page = "index.jsp"; } 426 427 if( gamenId == null || gamenId.length() == 0 ) { return page; } 428 429 GUIInfo guiInfo = getGUIInfo( gamenId ); 430 if( guiInfo == null ) { // 見つからない場合は、転送しない 431 LogWriter.log( "Forward[" + gamenId + "]先にはアクセス不可です。" ); 432 return page; 433 } 434 435 String address = guiInfo.getRealAddress( page ); 436 String link = getRequestParameter( address ); 437 438 // Ver 4.0.0 (2007/06/12) gamenId を使用する場合は、useRedirect = true をセット 439 useRedirect = true; 440 return link; 441 } 442 443 /** 444 * 【TAG】gamenId 属性を登録します。 445 * 446 * @og.tag 447 * gamenId 属性は、画面IDをキーに、実アドレスを求めるのに使用します。 448 * 画面IDが指定された場合は、実アドレスに変換する。指定されない場合は、 449 * page 属性をそのままリダイレクトアドレスとします。 450 * gamenId を指定した場合は、このuseRedirect属性に関係なく、Redirect されます。 451 * 452 * @og.rev 3.5.4.9 (2004/02/25) 新規追加 453 * 454 * @param id gamenId 属性 455 * @see #setUseRedirect( String ) 456 */ 457 public void setGamenId( final String id ) { 458 gamenId = nval( getRequestParameter( id ),gamenId ); 459 } 460 461 /** 462 * 【TAG】response.sendRedirect するかどうか[true/false]を指定します(初期値:false)。 463 * 464 * @og.tag 465 * useRedirect 属性は、URLの転送方式を指定できます。 466 * 通常は、pageContext.forward しますが、この属性に true を 467 * 設定すると、response.sendRedirect します。 468 * gamenId を指定した場合は、この属性に関係なく、Redirect されます。 469 * 初期値は、false (forward) です。 470 * 471 * @og.rev 3.5.6.6 (2004/08/23) 新規追加 472 * 473 * @param flag useRedirect 属性 [false:forwrd/true:redirect] 474 * @see #setGamenId( String ) 475 */ 476 public void setUseRedirect( final String flag ) { 477 useRedirect = nval( getRequestParameter( flag ),useRedirect ); 478 } 479 480 /** 481 * 【TAG】サブミット先の文書を表示させるフレーム、またはウィンドウの名前を指定します。 482 * 483 * @og.tag サブミット先のフレーム名(ターゲット属性)を設定します。 484 * 485 * @og.rev 3.8.0.4 (2005/08/08) 新規追加 486 * 487 * @param flag サブミット先の文書のフレーム名(ターゲット属性) 488 */ 489 public void setTarget( final String flag ) { 490 target = nval( getRequestParameter( flag ),target ); 491 } 492 493 /** 494 * 【TAG】ファイル転送時にファイル名の別名を指定します(初期値:null)。 495 * 496 * @og.tag 497 * ファイルを転送する場合に、オープンさせるファイル名を指定します。 498 * 指定しない場合は、フォラード前に呼び出されたアドレスがそのまま使用されます。 499 * 500 * @param name ファイル名 501 */ 502 public void setFilename( final String name ) { 503 filename = nval( getRequestParameter( name ),filename ); 504 } 505 506 /** 507 * 【TAG】ファイルダウンロードさせる場合に、Content-Disposition に設定する値 508 * 509 * @og.tag 510 * inline(そのまま開く) を指定すると、画面表示が基本です。 511 * PDF などは直接ダウンロードが始まります。 512 * attachment(ダウンロードダイアログを表示する) を指定すると、保存のダイアログを表示します。 513 * ただ、サーバやブラウザによって挙動が変わる事があるようです。 514 * 515 * 516 * @og.rev 5.10.12.0 (2019/06/03) 6.4.3.0の移植で新規追加 517 * 518 * @param dispos Content-Dispositionに設定する値(inline/attachment) 519 */ 520 public void setDisposition( final String dispos ) { 521 final String temp = nval( getRequestParameter( dispos ),disposition ); 522 523 if( "inline".equals( temp ) || "attachment".equals( temp ) ) { 524 disposition = temp; 525 } 526 else { 527 final String errMsg = "disposition 属性は、[inline/attachment] から、指定してください。" 528 + " disposition=[" + dispos + "]"; 529 throw new HybsSystemException( errMsg ); 530 } 531 } 532 533 /** 534 * 【TAG】(通常は使いません)画面遷移を行わない形式の登録方法を使用するかを指定します。 535 * 536 * @og.tag 537 * 画面遷移なしの登録を行うかどうかを指定します。 538 * trueが指定された場合、forwardタグでは、実際の画面遷移は行わずに、forward先の 539 * URLを<div id="noTransitionUrl">[URL]</div>の形でHTMLとして出力し、JavaScript側で 540 * 実際の画面遷移を発生させます。target属性は<div id="noTransitionTarget">[TARGET]</div>で 541 * 出力されます。 542 * 543 * この値は、og:headタグで設定値、または前画面からの値を継承するため、通常、この属性ではセットしません。 544 * 545 * @og.rev 4.3.3.0 (2008/10/01) 新規追加 546 * @og.rev 5.1.3.0 (2010/02/01) noTransition、ajaxSubmitのコントロールは、requestで行う。 547 * 548 * @param noTrnstn 画面遷移を行わない形式の登録方法を使用するか 549 */ 550 public void setNoTransition( final String noTrnstn ) { 551// noTransition = nval( getRequestParameter( noTrnstn ), noTransition ); 552 setNoTransitionRequest( nval( getRequestParameter( noTrnstn ), isNoTransitionRequest() ) ); 553 } 554 555 /** 556 * 【TAG】(通常は使いません)ajaxを利用したsubmitを利用するかどうかを指定します。 557 * 558 * @og.tag 559 * ajaxを利用したSubmit処理を行うかどうかを指定します。 560 * setNoTransitionをtrueにした場合と同様の処理を行います。 561 * (forwardせずにURLをDIVタグで出力する) 562 * 563 * この値は、og:headタグで設定値、または前画面からの値を継承するため、通常、この属性ではセットしません。 564 * 565 * @og.rev 4.3.8.0 (2009/08/01) 新規追加 566 * @og.rev 5.1.3.0 (2010/02/01) noTransition、ajaxSubmitのコントロールは、requestで行う。 567 * 568 * @param ajaxSubmit ajaxを利用したsubmitを利用するかどうか 569 */ 570 public void setUseAjaxSubmit( final String ajaxSubmit ) { 571// useAjaxSubmit = nval( getRequestParameter( ajaxSubmit ), useAjaxSubmit ); 572 setAjaxSubmitRequest( nval( getRequestParameter( ajaxSubmit ), isAjaxSubmitRequest() ) ); 573 } 574 575 /** 576 * 【TAG】(通常は使いません)useRedirect=true時に 日本語を含む転送先(page)をバイナリ変換するときのコード名[UTF-8/Windows-31J]など(初期値:null) 577 * 578 * @og.tag 579 * 日本語ファイル名を持つ URL を useRedirect で転送する場合に、転送先(page)をバイナリ変換しないと、転送できないケースがあります。 580 * このあたりは、ブラウザにも依存するので、既存の処理に影響しない様に、このパラメータを使用する場合のみ 581 * 処理を実行します。 582 * IEでの日本語ファイル転送で、うまくいかない場合の、暫定処置です。 583 * IEの場合は、redirectEncode="UTF-8" で、日本語ファイルを転送できます。 584 * ただし、useRedirect=true時に filename 属性によるファイル名の書き換え処理はできませんので、ご注意ください。 585 * 初期値は、null で、バイナリエンコードしません。(互換性ありの状態です。) 586 * 587 * @og.rev 5.6.5.0 (2013/06/07) 新規追加 588 * 589 * @param redEnc URL を 転送する場合に、日本語を含む転送先(page)をバイナリ変換するときのコード名 590 */ 591 public void setRedirectEncode( final String redEnc ) { 592 redirectEncode = nval( getRequestParameter( redEnc ), redirectEncode ); 593 } 594 595 /** 596 * 【TAG】リンクアドレスにURLチェック用の確認キーを付加するかどうか[true/false]を指定します。 597 * 598 * @og.tag 599 * この属性は、URLCheckFilter(org.opengion.hayabusa.filter.URLCheckFilter)と合わせて使用します。 600 * trueが指定された場合、リンクURLのパラメーターに、URL確認用のパラメーターが出力されます。 601 * このパラメーターを、URLCheckFilterが復号化し、正式なアクセスであるかどうかの判定を行います。 602 * 603 * 初期値は、 システムリソースのLINK_URL_CHECK です。 604 * 605 * @og.rev 5.10.11.0 (2019/05/03) 新規追加 606 * 607 * @param flag 暗号化するかかどうか [true:暗号化する/false:しない] 608 * @see org.opengion.hayabusa.filter.URLCheckFilter 609 */ 610 public void setUseURLCheck( final String flag ) { 611 useURLCheck = nval( getRequestParameter( flag ),useURLCheck ); 612 } 613 614 /** 615 * 【TAG】valsの値が[で開始している場合でもURLEncodeを通すかを設定します(初期値:false)。 616 * 617 * @og.tag 618 * テーブルモデルの値の変換のため、通常は先頭が[の場合はエンコードがかかりません。 619 * 強制的にかける場合にtrueにします。 620 * 621 * @og.rev 5.10.15.3 (2019/09/27) forceEnc追加 622 * 623 * @param flg 624 */ 625 public void setForceEnc( final String flg ) { 626 useForceEnc = nval( getRequestParameter( flg ), useForceEnc ); 627 } 628 629 /** 630 * シリアライズ用のカスタムシリアライズ書き込みメソッド 631 * 632 * @og.rev 4.0.0.0 (2006/09/31) 新規追加 633 * @serialData 一部のオブジェクトは、シリアライズされません。 634 * 635 * @param strm ObjectOutputStreamオブジェクト 636 * @throws IOException シリアライズに関する入出力エラーが発生した場合 637 */ 638 private void writeObject( final ObjectOutputStream strm ) throws IOException { 639 strm.defaultWriteObject(); 640 } 641 642 /** 643 * シリアライズ用のカスタムシリアライズ読み込みメソッド 644 * 645 * ここでは、transient 宣言された内部変数の内、初期化が必要なフィールドのみ設定します。 646 * 647 * @og.rev 4.0.0.0 (2006/09/31) 新規追加 648 * @serialData 一部のオブジェクトは、シリアライズされません。 649 * 650 * @param strm ObjectInputStreamオブジェクト 651 * @see #release2() 652 * @throws IOException シリアライズに関する入出力エラーが発生した場合 653 * @throws ClassNotFoundException クラスを見つけることができなかった場合 654 */ 655 private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException { 656 strm.defaultReadObject(); 657 } 658 659 /** 660 * urlCheckのパラメータを付加します。 661 * 662 * @param url 元のアドレス 663 * @return urlCheckを付加したアドレス 664 */ 665 private String addURLCheck( final String url ) { 666 HybsCryptography criptCls = null; 667 if( urlCheckCrypt != null && urlCheckCrypt.length() > 0 ){ 668 criptCls = new HybsCryptography( urlCheckCrypt ); 669 } 670 return XHTMLTag.addURLCheckKey( url, HybsSystem.URL_CHECK_KEY, getUser().getUserID(), System.currentTimeMillis() + urlCheckTime, criptCls ); 671 } 672 673 674 /** 675 * このオブジェクトの文字列表現を返します。 676 * 基本的にデバッグ目的に使用します。 677 * 678 * @return このクラスの文字列表現 679 */ 680 @Override 681 public String toString() { 682 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 683 .println( "VERSION" ,VERSION ) 684 .println( "tableId" ,tableId ) 685 .println( "page" ,page ) 686 .println( "keys" ,keys ) 687 .println( "dbkeys" ,dbkeys ) 688 .println( "vals" ,vals ) 689 .println( "gamenId" ,gamenId ) 690 .println( "useRedirect" ,useRedirect) 691 .println( "target" ,target ) 692 .println( "filename" ,filename ) 693 .println( "disposition" ,disposition ) 694 .println( "noTransition" ,noTransition ) 695 .println( "useAjaxSubmit" ,useAjaxSubmit ) 696 .println( "redirectEncode" ,redirectEncode ) 697 .println( "useURLCheck" ,useURLCheck ) 698 .println( "Other..." ,getAttributes().getAttribute() ) 699 .fixForm().toString() ; 700 } 701}