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.File; 021import java.util.ArrayList; 022import java.util.Calendar; 023import java.util.GregorianCalendar; 024import java.util.HashMap; 025import java.util.Map; 026 027import javax.servlet.http.HttpServletRequest; 028 029import org.opengion.fukurou.util.StringUtil; 030import org.opengion.fukurou.util.XHTMLTag; 031import org.opengion.hayabusa.common.HybsSystem; 032import org.opengion.hayabusa.common.HybsSystemException; 033import org.opengion.hayabusa.resource.GUIInfo; 034import org.opengion.hayabusa.resource.URLXfer; 035 036/** 037 * HTML のaタグと同等のリンクを作成するHTML拡張タグです。 038 * 039 * @og.formSample 040 * ●形式:<og:link href="…" > ... </og:link > 041 * ●body:あり(EVAL_BODY_BUFFERED:BODYを評価し、{@XXXX} を解析します) 042 * 043 * ●Tag定義: 044 * <og:link 045 * type 【HTML】リンク先のMIMEタイプを指定します 046 * name 【HTML】この要素をリンクの対象とするための名前を指定します(HTML5より廃止) 047 * gamenId 【TAG】画面ID属性を登録します 048 * useGamenId 【TAG】GAMENID,BACK_GAMENID 属性を付加するかどうか[true/false]を設定します(初期値:true) 049 * column 【TAG】リンクをつけたいカラムを指定します(ViewLink タグと併用) 050 * keys 【TAG】リンク先に渡すキーをCSV形式で複数指定します 051 * vals 【TAG】リンク先に渡す値をCSV形式で複数指定します 052 * onLink 【TAG】リンクを張る(true or 1)/張らない(false or 0)の設定を指定します(初期値:true) 053 * markList 【TAG】処理するマークを、"|"区切りの文字列で指定します 054 * href 【HTML】リンク先のURLを指定します 055 * target 【HTML】リンク先の表示ターゲットを指定します 056 * caseKey 【TAG】このタグ自体を利用するかどうかの条件キーを指定します(初期値:null) 057 * caseVal 【TAG】このタグ自体を利用するかどうかの条件値を指定します(初期値:null) 058 * caseNN 【TAG】指定の値が、null/ゼロ文字列 でない場合(Not Null=NN)は、このタグは使用されます(初期値:true) 059 * caseNull 【TAG】指定の値が、null/ゼロ文字列 の場合は、このタグは使用されます(初期値:true) 060 * lbl 【TAG】ラベルリソースのラベルIDを指定します 061 * xlink 【TAG】href ではなく、xlink:href を使用するかどうか[true/false]を指定します(初期値:false) 062 * fileCheck 【TAG】ファイルの存在チェックを行うかどうか[true/false]を指定します(初期値:false) 063 * filePath 【TAG】アドレスにファイルのディレクトリ直接のアドレスを指定するかどうか[true/false]設定します(初期値:false) 064 * hreflang 【HTML】リンク先の基本となる言語コードを指定します 065 * rel 【HTML】この文書から見た、href属性で指定されるリンク先との関係を指定します 066 * rev 【HTML】href属性で指定されるリンク先から見た、この文書との関係をしてします 067 * charset 【HTML】リンク先の文字コードセットを指定します 068 * shape 【HTML】リンクボタンの形状(イメージマップ rect/circle/poly/default)を指定します 069 * coords 【HTML】リンクボタンの座標を指定します 070 * id 【HTML】要素に対して固有の名前(id)をつける場合に設定します 071 * lang 【HTML】要素の内容と他の属性値の言語(lang,xml:lang)を指定します 072 * dir 【HTML】文字表記の方向(dir)を指定します 073 * title 【HTML】要素に対する補足的情報(title)を設定します 074 * style 【HTML】この要素に対して適用させるスタイルシート(style)を設定します 075 * tabindex 【HTML】タブの移動順(tabindex)を指定します(0 ~ 32767) 076 * accesskey 【HTML】アクセスキー(alt+キーで直接指定)を割り当てます 077 * clazz 【HTML】要素に対して class 属性を設定します 078 * language 【TAG】タグ内部で使用する言語コード[ja/en/zh/…]を指定します 079 * useDirectJump 【TAG】ダイレクトジャンプを使用するかどうか[true/false]を指定します(初期値:false) 080 * useRequestCache 【TAG】リクエストキャッシュ情報を使用するかどうか[true/false]を指定します(初期値:true) 081 * hrefOnly 【TAG】リンク(アンカータグ)ではなく、href 属性をそのまま返すかどうか[true/false]を指定します(初期値:false) 082 * hrefTarget 【TAG】リンク(アンカータグ)ではなく、href 属性と、target属性を キーも含めて返すかどうか[true/false]を指定します(初期値:false) 083 * delKeys 【TAG】リクエストキャッシュ情報使用時に使用しない(削除する)キーをCSV形式で複数指定します 084 * onClick 【HTML】JavaScriptのイベント onClick を設定します(例:onClick="renew('query.jsp','QUERY');") 085 * onBlur 【HTML】JavaScriptのイベント onBlur を設定します(例:onBlur="this.value=value.toUpperCase();") 086 * onFocus 【HTML】JavaScriptのイベント onFocus を設定します 087 * ondblClick 【HTML】JavaScriptのイベント ondblClick を設定します 088 * onMouseDown 【HTML】JavaScriptのイベント onMouseDown を設定します 089 * onMouseUp 【HTML】JavaScriptのイベント onMouseUp を設定します 090 * onMouseMove 【HTML】JavaScriptのイベント onMouseMove を設定します 091 * onMouseOut 【HTML】JavaScriptのイベント onMouseOut を設定します 092 * onMouseOver 【HTML】JavaScriptのイベント onMouseOver を設定します 093 * roles 【TAG】ロールをセットします 094 * useURLCheck 【TAG】リンクアドレスにURLチェック用の確認キーを付加するかどうか[true/false]を指定します(初期値:false) 095 * urlCheckUser 【TAG】URLチェック用の確認キーに対して、リンクを開くことのできるユーザーIDを指定します(初期値:ログインユーザー) 096 * urlCheckTime 【TAG】URLチェック用の確認キーに対して、リンクの有効期限を指定します(初期値:60分) 097 * useHrefEncode 【TAG】href 部分に対して、(;%)の2文字だけ URLEncodeを行うかどうかを指定します(初期値:USE_HREF_URLENCODE[=false]) 098 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 099 * > ... Body ... 100 * </og:link> 101 * 102 * ●使用例 103 * ・普通のリンク 104 * <og:link gamenId="32ExcelIn" href="direct.jsp" keys="location,filename,modifyType" value="{@GUI.ADDRESS},{@GUI.ADDRESS}.xls,A" target="RESULT" > 105 * <img src="{@SYS.JSP}/image/insert.gif" alt="Excel Insert" /><og:message lbl="MSG0057" /> 106 * </og:link> 107 * 108 * ・検索結果テーブル内でのリンク 109 * <og:viewLink command="{@command}"> 110 * <og:link column="KMZ" gamenId="RK0251" href="index.jsp" target="CONTENTS" 111 * keys="KMZ,ORDER_BY,command" vals="[KMZ],'LKIS',NEW" /> 112 * </og:viewLink> 113 * 114 * ・ダイレクトジャンプ(指定の画面へ直接飛ばす)URL 115 * gamenId を指定しなければこの画面へのURLを作成します。 116 * このURLは、その画面の index.jsp に直接ジャンプするためのURLです。 117 * この場合、useRequestCache="true" が初期値なので、必要なければ、false に設定願います。 118 * <og:link useDirectJump="true" delKeys="pageSize" 119 * keys="location,filename,modifyType" value="{@GUI.ADDRESS},{@GUI.ADDRESS}.xls,A" /> 120 * @og.group 画面表示 121 * 122 * @version 4.0 123 * @author Kazuhiko Hasegawa 124 * @since JDK5.0, 125 */ 126public class LinkTag extends HTMLTagSupport { 127 //* このプログラムのVERSION文字列を設定します。 {@value} */ 128 private static final String VERSION = "6.0.2.0 (2014/08/29)" ; 129 130 private static final long serialVersionUID = 602020140829L ; 131 132 private String column = null; 133 private String onLink = "true"; // true または 1 134 private boolean fileCheck = false; 135 private boolean filePath = false; 136 private String baseURL = HybsSystem.sys( "FILE_URL" ); 137 private String fileURL = baseURL; 138 private String gamenId = null; 139 private boolean useGamenId = true; 140 // 3.5.2.0 (2003/10/20) 141 private String markList = "true|TRUE|1"; // true または 1 142 private boolean xlink = false; // 3.5.5.0 (2004/03/12) 143 private boolean useDirectJump = false; // 3.7.1.0 (2005/04/26) 144 private boolean useRequestCache = true; // 3.7.1.0 (2005/04/26) 145 private int validDuration = -1; 146 private boolean hrefOnly = false; // 4.0.0 (2005/11/30) 147 private boolean hrefTarget = false; // 5.5.5.6 (2012/08/31) 148 private boolean useHrefEncode = HybsSystem.sysBool( "USE_HREF_URLENCODE" ); // 6.0.2.0 (2014/08/29) 149 150 private String[] keys = null; // 3.5.6.2 (2004/07/05) 151 private String[] vals = null; // 3.5.6.2 (2004/07/05) 152 private String[] delKeys = null; // 3.7.1.0 (2005/04/26) 153 private boolean useURLCheck = false; // 4.3.7.0 (2009/06/01) 154 private String urlCheckUser= null; // 4.3.7.0 (2009/06/01) 155 private long urlCheckTime= 1000*60*60*24;// 4.3.7.0 (2009/06/01) 156 157 /** 158 * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。 159 * 160 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。ボディが存在する場合のみボディが呼ばれる対応。 161 * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応 162 * @og.rev 5.7.1.2 (2013/12/20) msg ⇒ msglbl 変更 163 * 164 * @return 後続処理の指示( EVAL_BODY_BUFFERED ) 165 */ 166 @Override 167 public int doStartTag() { 168 // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応 169 if( useTag() ) { 170 String msglbl = getMsglbl(); // 5.7.1.2 (2013/12/20) msg ⇒ msglbl 変更 171 if( msglbl == null && column != null ) { msglbl = "[" + column + "]"; } 172 set( "body",msglbl ); 173 return EVAL_BODY_BUFFERED ; // Body を評価する。( extends BodyTagSupport 時) 174 } 175 return SKIP_BODY ; // Body を評価しない 176 } 177 178 /** 179 * Taglibのタグ本体を処理する doAfterBody() を オーバーライドします。 180 * 181 * @og.rev 3.1.1.0 (2003/03/28) ボディの内容を取得する処理を、CommonTagSupport で行う。 182 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。ボディが存在する場合のみボディが呼ばれる対応。 183 * 184 * @return 後続処理の指示(SKIP_BODY) 185 */ 186 @Override 187 public int doAfterBody() { 188 String label = getBodyString(); 189 190 if( label != null && label.length() > 0 ) { 191 set( "body",label ); 192 } 193 194 return SKIP_BODY ; 195 } 196 197 /** 198 * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。 199 * 200 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 201 * @og.rev 3.1.2.0 (2003/04/07) リンク指定時に、画面IDを渡して、実アドレスを求める事ができる様にする。 202 * @og.rev 3.1.7.0 (2003/05/02) 戻るボタン用のBACK_GAMENID を、引数に追加します。 203 * @og.rev 3.1.8.0 (2003/05/16) GAMENID属性のURLへの自動セットを行うかどうかを決める属性( useGamenId )を追加。 204 * @og.rev 3.1.8.0 (2003/05/16) 画面IDが指定されたときのリンク情報作成方法を通常のリンク時にも適用する。 205 * @og.rev 3.1.8.0 (2003/05/16) 画面のロールに応じて、リンクを張る/張らないを自動判断する。 206 * @og.rev 3.5.2.0 (2003/10/20) markList属性を追加 207 * @og.rev 3.5.5.0 (2004/03/12) xlink属性をAttributeオブジェクトに追加 208 * @og.rev 3.5.6.2 (2004/07/05) makeTag() の処理範囲変更、viewlink へのパラメータ変更。 209 * @og.rev 3.7.1.0 (2005/04/26) ダイレクトジャンプリンク機能を追加 210 * @og.rev 4.0.0.0 (2005/11/30) roles 属性の追加 211 * @og.rev 4.0.0.0 (2005/08/31) 同一カラムの複数登録を許可します。 212 * @og.rev 4.3.0.0 (2008/07/04) ロールモードマルチ対応 213 * @og.rev 4.3.7.1 (2009/06/08) URLチェック機能対応 214 * @og.rev 4.3.7.4 (2009/07/01) 循環参照を解消 215 * @og.rev 4.3.8.0 (2009/08/01) ユーザーIDの外部設定に対応 216 * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応 217 * @og.rev 6.0.2.0 (2014/08/29) useHrefEncode 属性対応 218 * 219 * @return 後続処理の指示 220 */ 221 @Override 222 public int doEndTag() { 223 debugPrint(); // 4.0.0 (2005/02/28) 224 // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応 225 if( !useTag() ) { return EVAL_PAGE ; } 226 227 // 3.1.8.0 (2003/05/16) GAMENID属性のURLへの自動セットを行うかどうかを決める属性( useGamenId )を追加。 228 // 4.0.0 (2005/11/30) 指定のロールが、アクセス許可の場合は、出力します。 229 String roles = get( "roles" ); 230 // 4.3.0.0 (2008/07/04) ロールモードマルチ対応 231 if( ! getUser().isAccess( roles ) ) { 232 return EVAL_PAGE ; 233 } 234 235 // 4.3.7.1 (2009/06/08) 236 if( useURLCheck ) { 237 // 4.3.8.0 (2009/08/01) 238 urlCheckUser = nval( urlCheckUser, getUser().getUserID() ); 239 } 240 241 ViewLinkTag viewlink = (ViewLinkTag)findAncestorWithClass( this,ViewLinkTag.class ); 242 if( viewlink != null ) { 243 if( isGamenCheck() ) { set( "onLink", onLink ); } 244 else { set( "onLink", "false" ); } 245 // 4.3.7.1 (2009/06/08) 246 if( useURLCheck ) { 247 set( "useURLCheck" , "true" ); 248 set( "urlCheckUser", urlCheckUser ); 249 set( "urlCheckTime", String.valueOf( System.currentTimeMillis() + urlCheckTime ) ); 250 } 251 set( "markList",markList ); 252 set( "linkFormat",makeTag() ); // 3.5.6.2 (2004/07/05) 253 // 4.0.0 (2005/08/31) 同一カラムの複数登録を許可します。 254 set( "column",column ); 255 256 // 6.0.2.0 (2014/08/29) useHrefEncode 属性対応 257 if( !useGamenId && useHrefEncode ) { 258 set( "useHrefEncode","true" ); 259 } 260 viewlink.addAttribute( getAttributes() ); 261 } 262 // 3.7.1.0 (2005/04/26) ダイレクトジャンプリンク機能を追加 263 // 画面の利用権限有無などは調査不要 264 else if( useDirectJump ) { 265 jspPrint( makeDirectLink() ); 266 } 267 else { 268 if( isFileCheck() && isGamenCheck() && markList.indexOf( onLink ) >= 0 ) { 269 // 3.5.6.2 (2004/07/05) makeTag() より移動 270 if( filePath ) { 271 String furl = get( "href" ); 272 273 fileURL = StringUtil.urlAppend( baseURL,furl ); 274 String filename = HybsSystem.url2dir( fileURL ); 275 276 set( "href",filename ); 277 } 278 279 // 4.3.7.1 (2009/06/08) 280 String tag = makeTag(); 281 if( useURLCheck ) { 282 if( hrefOnly ) { 283 // 4.3.7.4 (2009/07/01) 循環参照を解消 284 tag = XHTMLTag.addURLCheckKey( tag, HybsSystem.URL_CHECK_KEY, getUser().getUserID(), System.currentTimeMillis() + urlCheckTime ); 285 } 286 else { 287 // 4.3.7.4 (2009/07/01) 循環参照を解消 288 tag = XHTMLTag.embedURLCheckKey( tag, HybsSystem.URL_CHECK_KEY, getUser().getUserID(), System.currentTimeMillis() + urlCheckTime ); 289 } 290 } 291 jspPrint( tag ); 292 } 293 } 294 295 return EVAL_PAGE ; 296 } 297 298 /** 299 * タグリブオブジェクトをリリースします。 300 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 301 * 302 * @og.rev 2.0.0.4 (2002/09/27) カスタムタグの release() メソッドを、追加 303 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 304 * @og.rev 3.1.2.0 (2003/04/07) リンク指定時に、画面IDを渡して、実アドレスを求める事ができる様にする。 305 * @og.rev 3.1.8.0 (2003/05/16) GAMENID属性のURLへの自動セットを行うかどうかを決める属性( useGamenId )を追加。 306 * @og.rev 3.5.2.0 (2003/10/20) markList属性を追加 307 * @og.rev 3.5.5.0 (2004/03/12) xlink属性を追加 308 * @og.rev 3.5.6.2 (2004/07/05) keys , vals属性を追加 309 * @og.rev 3.7.1.0 (2005/04/26) useDirectJump , useRequestCache , delKeys 属性を追加 310 * @og.rev 4.0.0.0 (2005/09/30) validDuration 属性を追加 311 * @og.rev 4.3.7.0 (2009/06/01) useURLCheck属性を追加 312 * @og.rev 5.5.5.6 (2012/08/31) hrefTarget属性を追加 313 * @og.rev 6.0.2.0 (2014/08/29) useHrefEncode属性を追加 314 * 315 */ 316 @Override 317 protected void release2() { 318 super.release2(); 319 column = null; 320 onLink = "true"; // true または 1 321 markList = "true|TRUE|1"; // 3.5.2.0 (2003/10/20) 322 fileCheck = false; 323 filePath = false; 324 baseURL = HybsSystem.sys( "FILE_URL" ); 325 fileURL = baseURL; 326 gamenId = null; 327 useGamenId = true; 328 xlink = false; // 3.5.5.0 (2004/03/12) 329 keys = null; // 3.5.6.2 (2004/07/05) 330 vals = null; // 3.5.6.2 (2004/07/05) 331 useDirectJump = false; // 3.7.1.0 (2005/04/26) 332 useRequestCache = true; // 3.7.1.0 (2005/04/26) 333 delKeys = null; // 3.7.1.0 (2005/04/26) 334 validDuration = -1; 335 hrefOnly = false; // 4.0.0 (2005/11/30) 336 hrefTarget = false; // 5.5.5.6 (2012/08/31) 337 useURLCheck = false; // 4.3.7.0 (2009/06/01) 338 urlCheckUser = null; // 4.3.7.0 (2009/06/01) 339 urlCheckTime = 1000*60*60*24; // 4.3.7.0 (2009/06/01) 340 useHrefEncode = HybsSystem.sysBool( "USE_HREF_URLENCODE" ); // 6.0.2.0 (2014/08/29) 341 } 342 343 /** 344 * リンクを作成します。 345 * 346 * @og.rev 3.5.5.0 (2004/03/12) xlink 属性に応じたリンク文字を作成します。 347 * @og.rev 3.5.6.2 (2004/07/05) XHTMLTag の変換値のみを返す様に変更。 348 * @og.rev 3.7.0.3 (2005/03/01) リンク作成時に行番号を引数に追加する。 349 * @og.rev 4.0.0.0 (2005/11/30) href 属性のみを返します。 350 * @og.rev 4.0.1.0 (2007/12/17) BACK_ADDRESSの追加 351 * @og.rev 4.3.3.5 (2008/11/08) サーバーアドレスを取得する際に、リクエストから取得するように変更します。 352 * @og.rev 4.3.7.0 (2009/06/01) URLチェック機能対応 353 * @og.rev 4.3.7.1 (2009/06/08) ↑の実装を#doEndTagに移動 354 * @og.rev 5.5.5.6 (2012/08/31) 「href="*******" target="******"」 という キー付きの文字列を作成 355 * @og.rev 6.0.2.0 (2014/08/29) useHrefEncode 属性対応 356 * 357 * @return リンクタグ文字列 358 */ 359 @Override 360 protected String makeTag() { 361 362 makeGamenLink(); // 3.5.6.2 (2004/07/05) 363 if( get( "body" ) == null ) { set( "body" , get( "href" ) ); } 364 365 // xlink と通常の link では、URL接続文字が異なる。 366 String sep = xlink ? "&" : "&" ; 367 368 String urlEnc = XHTMLTag.urlEncode( keys,vals,sep ); 369 // 3.5.6.2 (2004/07/05) addBackGamenId() メソッドの内容を移動 370 if( useGamenId ) { 371 String backGamenId = getGUIInfoAttri( "KEY" ); // 4.0.0 (2005/01/31) 372 urlEnc += sep + "BACK_ROW={I}" + sep + "BACK_GAMENID=" + backGamenId ; // 3.7.0.3 (2005/03/01) 373 if( gamenId != null && gamenId.length() > 0 ) { 374 urlEnc += sep + "GAMENID=" + gamenId ; 375 } 376 // 4.0.1.0 (2007/12/17) gamenIdがある場合はbackAddressを付加する。(BackGamenTagではこれで戻る) 377 String guiAddress = getGUIInfoAttri( "ADDRESS" ); 378 379 // 4.3.3.5 (2008/11/08) サーバーアドレスを取得する際に、リクエストから取得するように変更します。 380 String backAddress = getContextURL() + guiAddress + "/index.jsp"; 381 urlEnc += sep + "BACK_ADDRESS=" + backAddress; 382 } 383 // 6.0.2.0 (2014/08/29) useHrefEncode 属性対応 384 else if( useHrefEncode ) { 385 String furl = get( "href" ); 386 if( furl != null ) { 387 furl = furl.replaceAll( "%","%25" ).replaceAll( ";","%3B" ); // 先に % の変換をしないとまずい。 388 set( "href",furl ); 389 } 390 } 391 392 // 4.0.0 (2005/11/30) href 属性のみを返します。 393 if( hrefOnly ) { 394 return XHTMLTag.addUrlEncode( get( "href" ),urlEnc,sep ); 395 } 396 397 // 5.5.5.6 (2012/08/31) 「href="*******" target="******"」 という キー付きの文字列を作成 398 if( hrefTarget ) { 399 StringBuilder hrefTemp = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 400 401 hrefTemp.append( "href=\"" ).append( XHTMLTag.addUrlEncode( get( "href" ),urlEnc,sep ) ).append( "\"" ); 402 403 String target = get( "target" ) ; 404 if( target != null && !target.isEmpty() ) { 405 hrefTemp.append( " target=\"" ).append( target ).append( "\"" ); 406 } 407 408 return hrefTemp.toString() ; 409 } 410 411 if( xlink ) { 412 return XHTMLTag.xlink( getAttributes(),urlEnc ) ; 413 } 414 else { 415 return XHTMLTag.link( getAttributes(),urlEnc ) ; 416 } 417 } 418 419 /** 420 * ダイレクトジャンプリンクを作成します。 421 * 422 * gamenId を指定しなければ、この画面が指定されたと考えます。 423 * target を指定しなければ、"_blank" を指定します。 424 * msg がなければ(または、BODY部が空の場合)、画面名にこのリンクを作成します。 425 * 426 * @og.rev 3.7.1.0 (2005/04/26) 新規追加 427 * @og.rev 4.0.0.0 (2005/09/30) リンク文字列をハッシュ化します。 428 * @og.rev 4.3.3.5 (2008/11/08) サーバーアドレスを取得する際に、リクエストから取得するように変更します。 429 * 430 * @return ダイレクトジャンプリンク文字列 431 */ 432 private String makeDirectLink() { 433 434 // gamenId を指定しなければ、この画面が指定されたと考えます。 435 if( gamenId == null ) { 436 gamenId = getGUIInfoAttri( "KEY" ); 437 } 438 439 // キャッシュ情報と keys,vals情報を設定します。 440 if( useRequestCache ) { makeRequestCache2Vals( gamenId ); } 441 String urlEnc = XHTMLTag.urlEncode( keys,vals ); 442 urlEnc = urlEnc + "&GAMENID=" + gamenId ; 443 444 String href = get( "href" ); 445 if( href == null || href.length() == 0 ) { 446 // 4.3.3.5 (2008/11/08) サーバーアドレスを取得する際に、リクエストから取得するように変更します。 447 href = getContextURL() + "index.jsp" ; 448 } 449 450 String redirectURL = href + "?" + urlEnc ; 451 String name = getGUIInfoAttri( "LNAME" ); 452 453 String validDate = null; // 設定されない場合は、無制限 454 if( validDuration != 0 ) { 455 if( validDuration < 0 ) { // マイナスの場合は、初期値が使われます。 456 validDuration = sysInt( "LINK_VALID_DURATION_DAYS" ); 457 } 458 // ミリ秒 秒 時間 459 long nowTime = System.currentTimeMillis() + 1000L * 3600L * 24L * validDuration ; 460 validDate = HybsSystem.getDate( nowTime,"yyyyMMdd" ); 461 } 462 String userid = getUser().getUserID(); 463 464 URLXfer xfer = new URLXfer(); 465 // redirectURL,name,validDate,userid 466 return xfer.getRandomURL( redirectURL,name,validDate,userid ); 467 } 468 469 /** 470 * リクエストキャッシュ情報を加味した keys,vals を再作成します。 471 * このメソッドは、ダイレクトジャンプ時のみ有効です。 472 * 473 * リクエスト情報のMapを取り出します。そのとき、keys,vals を優先して 474 * 設定します。 475 * 476 * @og.rev 3.7.1.0 (2005/04/26) 新規追加 477 * 478 * @param gamenId 画面ID(リクエストキャッシュの取り出しキー) 479 */ 480 @SuppressWarnings(value={"unchecked"}) 481 private void makeRequestCache2Vals( final String gamenId ) { 482 Map<String,String[]> cache = new HashMap<String,String[]>(); 483 484 String cacheKey = HybsSystem.REQ_CACHE_KEY + gamenId ; 485 Map<String,String[]> map = (Map<String,String[]>)getSessionAttribute( cacheKey ); 486 if( map != null ) { cache.putAll( map ); } 487 488 if( keys != null ) { 489 for( int i=0; i<keys.length; i++ ) { 490 // keys,vals をキャッシュに上書き( キャッシュは、文字列配列) 491 String[] temp = new String[] { vals[i] } ; 492 cache.put( keys[i],temp ); 493 } 494 } 495 496 // ダイレクトジャンプするための画面IDは、別途設定するため、削除しておきます。 497 cache.remove( "GAMENID" ); 498 499 // 使用しないキーを、削除しておきます。 500 if( delKeys != null ) { 501 for( int i=0; i<delKeys.length; i++ ) { 502 cache.remove( delKeys[i] ); 503 } 504 } 505 506 // マップキーを取得。キャッシュ値は、String[] なので、複数キー登録する。 507 String[] cKeys = cache.keySet().toArray( new String[cache.size()] ); 508 509 ArrayList<String> v_keys = new ArrayList<String>(); 510 ArrayList<String> v_vals = new ArrayList<String>(); 511 for( int i=0; i<cKeys.length; i++ ) { 512 String kk = cKeys[i]; 513 String[] vv = cache.get( kk ); 514 if( vv != null ) { 515 for( int j=0; j<vv.length; j++ ) { 516 v_keys.add( kk ); 517 v_vals.add( vv[j] ); 518 } 519 } 520 } 521 522 keys = v_keys.toArray( new String[v_keys.size()] ); 523 vals = v_vals.toArray( new String[v_vals.size()] ); 524 } 525 526 /** 527 * ファイルの存在チェックを行います。 528 * 529 * 実ファイルは、URL(httpの引数)より、変換して求めます。 530 * 531 * @og.rev 3.1.8.0 (2003/05/16) 画面のロールに応じて、リンクを張る/張らないを自動判断する。 532 * 533 * @return ファイルが存在する(true)/存在しない(false) 534 */ 535 private boolean isFileCheck() { 536 boolean rtn = true; 537 538 if( fileCheck ) { 539 File file = null; 540 541 String url = get( "href" ); 542 if( url != null ) { 543 String fin = HybsSystem.url2dir( url ); 544 file = new File( fin ); 545 } 546 rtn = file != null && file.exists() ; 547 } 548 549 return rtn ; 550 } 551 552 /** 553 * リンク先の画面のロールに応じて、リンクを張る/張らないを自動判断を行います。 554 * 555 * リンク先の画面IDは、gamenId 属性で指定してください。それ以外のリンクは、 556 * 自動判断できません。 557 * link タグ単独の場合に、画面にアクセスできない場合は、メッセージも表示されません。 558 * viewLink タグを利用される場合は、リンクのON/OFF で制御します。 559 * 560 * @og.rev 3.1.8.0 (2003/05/16) 画面のロールに応じて、リンクを張る/張らないを自動判断する。 561 * @og.rev 4.0.0.0 (2005/01/31) GUIオブジェクトがマップに無ければ、アクセスできない。 562 * 563 * @return 画面アクセス許可する(true)/許可しない(false) 564 */ 565 private boolean isGamenCheck() { 566 boolean rtn = true; 567 568 if( gamenId != null ) { 569 GUIInfo guiInfo = getGUIInfo( gamenId ); // 4.0.0 (2005/01/31) 570 571 // 4.0.0 (2005/01/31) ユーザー毎にアクセスできるGUIが設定されている為 572 // 存在しなければ、アクセス不可ということ。 573 if( guiInfo == null ) { rtn = false; } 574 } 575 576 return rtn ; 577 } 578 579 /** 580 * 画面IDとhref から、指定のURLを作成します。 581 * 582 * @og.rev 3.1.2.0 (2003/04/07) リンク指定時に、画面IDを渡して、実アドレスを求める事ができる様にする。 583 * @og.rev 3.1.8.0 (2003/05/16) リンク作成時に、kyes/values が null の時の処理の修正。 584 * @og.rev 3.1.8.0 (2003/05/16) GAMENID属性のURLへの自動セットを行うかどうかを決める属性( useGamenId )を追加。 585 * @og.rev 3.1.8.0 (2003/05/16) 画面IDが指定されたときのリンク情報作成方法を通常のリンク時にも適用する。 586 * @og.rev 3.5.5.0 (2004/03/12) URLを求めるのに、GUIInfo#getRealAddress() を使用する。 587 * @og.rev 4.0.0.0 (2005/01/31) GUIInfoの実アドレスのパラメータを考慮する。 588 * 589 */ 590 private void makeGamenLink() { 591 if( gamenId == null || gamenId.length() == 0 ) { return ; } // 4.0.0 (2005/11/30) 592 593 GUIInfo guiInfo = getGUIInfo( gamenId ); // 4.0.0 (2005/01/31) 594 if( guiInfo == null ) { return ; } // 見つからない場合は、アクセス不可 595 596 String address = guiInfo.getRealAddress( get( "href" ) ); 597 String url = getRequestParameter( address ); 598 set( "href",url ); 599 600 String label = guiInfo.getLabel(); 601 if( get( "title" ) == null ) { 602 set( "title","To:" + label ); 603 } 604 if( get( "body" ) == null ) { 605 set( "body",label ); 606 } 607 } 608 609 /** 610 * リクエストからサーバーアドレス(例:http://hn5120:8824/ver4/jsp/)を取得します。 611 * 612 * @og.rev 4.3.3.5 (2008/11/08) 新規追加。 613 * @og.rev 5.4.3.8 (2011/01/24) プロトコルhttps対応 614 * 615 * @return サーバーアドレス文字列 616 */ 617 private String getContextURL() { 618 StringBuilder link = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 619 HttpServletRequest request = (HttpServletRequest) getRequest(); 620 //link.append( "http://" ); 621 link.append( request.getScheme() ).append( "://" ); // 5.4.3.8 622 link.append( request.getServerName() ).append( ":" ); 623 link.append( request.getServerPort() ); 624 link.append( request.getContextPath() ); 625 link.append( "/jsp/" ); 626 return link.toString(); 627 } 628 629 /** 630 * 【HTML】リンク先のMIMEタイプを指定します。 631 * 632 * @og.tag リンク先のMIMEタイプを指定します。 633 * 634 * @param type MIMEタイプ 635 */ 636 public void setType( final String type ) { 637 set( "type",getRequestParameter( type ) ); 638 } 639 640 /** 641 * 【HTML】この要素をリンクの対象とするための名前を指定します。 642 * 643 * @og.tag この要素をリンクの対象とするための名前を指定します。 644 * 645 * ※ HTML5では、a要素のname属性は廃止されています。 646 * HTML4.01におけるname属性は、ウェブページ内の特定個所に名前を付けて、 647 * ページ内リンクを作成する際などに使用していました。 HTML5で同様の 648 * 機能を作成する場合にはid属性を使用します。 id属性は、ひとつの 649 * 文書の中では重複して同じ名前を付けることはできないので、 650 * ウェブページ内の場所を一意に特定できます。 651 * 652 * @param name 名前 653 * @see <a href="http://www.htmq.com/html5/a.shtml">a</a> 654 */ 655 public void setName( final String name ) { 656 set( "name",getRequestParameter( name ) ); 657 } 658 659 /** 660 * 【TAG】リンクをつけたいカラムを指定します(ViewLink タグと併用)。 661 * 662 * @og.tag 663 * このカラム名のTableModelに対して、 ViewLink タグが存在する場合は, 664 * リンクを張ります。 665 * 666 * @param clm カラム 667 */ 668 public void setColumn( final String clm ) { 669 this.column = getRequestParameter( clm ); 670 } 671 672 /** 673 * 【HTML】リンク先のURLを指定します。 674 * 675 * @og.tag リンク先のURLを指定します。 676 * 677 * @param href リンク先のURL 678 */ 679 public void setHref( final String href ) { 680 set( "href",getRequestParameter( href ) ); 681 } 682 683 /** 684 * 【HTML】リンク先の基本となる言語コードを指定します。 685 * 686 * @og.tag リンク先の基本となる言語コードを指定します。 687 * 688 * @param hreflang 言語コード 689 */ 690 public void setHreflang( final String hreflang ) { 691 set( "hreflang",getRequestParameter( hreflang ) ); 692 } 693 694 /** 695 * 【HTML】この文書から見た、href属性で指定されるリンク先との関係を指定します。 696 * 697 * @og.tag この文書から見た、href属性で指定されるリンク先との関係を指定します。 698 * 699 * @param rel リンク先との関係 700 */ 701 public void setRel( final String rel ) { 702 set( "rel",getRequestParameter( rel ) ); 703 } 704 705 /** 706 * 【HTML】href属性で指定されるリンク先から見た、この文書との関係をしてします。 707 * 708 * @og.tag href属性で指定されるリンク先から見た、この文書との関係をしてします。 709 * 710 * @param rev リンク先から見たこの文書との関係 711 */ 712 public void setRev( final String rev ) { 713 set( "rev",getRequestParameter( rev ) ); 714 } 715 716 /** 717 * 【HTML】リンク先の文字コードセットを指定します。 718 * 719 * @og.tag リンク先の文字コードセットを指定します。 720 * 721 * @param charset 文字コードセット 722 */ 723 public void setCharset( final String charset ) { 724 set( "charset",getRequestParameter( charset ) ); 725 } 726 727 /** 728 * 【HTML】リンク先の表示ターゲットを指定します。 729 * 730 * @og.tag リンク先の文書を表示させるフレーム、またはウィンドウの名前を指定します。 731 * 732 * @param target ターゲット 733 */ 734 public void setTarget( final String target ) { 735 set( "target",getRequestParameter( target ) ); 736 } 737 738 /** 739 * 【HTML】リンクボタンの形状(イメージマップ rect/circle/poly/default)を指定します。 740 * 741 * @og.tag リンクボタンの形状(イメージマップ rect/circle/poly/default)を指定します。 742 * 743 * @param shape 形状(イメージマップ rect/circle/poly/default) 744 */ 745 public void setShape( final String shape ) { 746 set( "shape",getRequestParameter( shape ) ); 747 } 748 749 /** 750 * 【HTML】リンクボタンの座標を指定します。 751 * 752 * @og.tag 753 * coords セット 754 * 755 * @param coords リンクボタンの座標 756 */ 757 public void setCoords( final String coords ) { 758 set( "coords",getRequestParameter( coords ) ); 759 } 760 761 /** 762 * 【TAG】リンク先に渡すキーをCSV形式で複数指定します。 763 * 764 * @og.tag リンク先に渡すキーを指定します。 765 * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 766 * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。 767 * 768 * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用 769 * 770 * @param key キー(CSV形式) 771 */ 772 public void setKeys( final String key ) { 773 keys = getCSVParameter( key ); 774 } 775 776 /** 777 * 【TAG】リンク先に渡す値をCSV形式で複数指定します。 778 * 779 * @og.tag リンク先に渡す値を指定します。 780 * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 781 * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。 782 * 783 * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用 784 * 785 * @param val 値(CSV形式) 786 */ 787 public void setVals( final String val ) { 788 vals = getCSVParameter( val ); 789 } 790 791 /** 792 * 【TAG】リンクを張る(true or 1)/張らない(false or 0)の設定を指定します(初期値:true)。 793 * 794 * @og.tag 795 * リンクを張る場合は、"true"(または "1") リンクを張らない 796 * 場合は, "true以外"(または "0")をセットします。 797 * 初期値は、 "true"(リンクを張る)です。 798 * さらに、[カラム名] で、動的にカラムの値で、リンクを張る、張らないを 799 * 選ぶ事が可能になります。値は、"true"(または "1") で、マークします。 800 * 追記 3.5.2.0 (2003/10/20):markList属性に、処理対象文字列郡を指定できます。 801 * これにより、リンクを処理するかどうかの判断が、true,1 以外にも使用できるようになりました。 802 * 803 * @og.rev 3.5.2.0 (2003/10/20) markList属性を追加 804 * 805 * @param flag リンクの設定[true,1:リンクを張る/true,1以外:リンクを張らない] 806 */ 807 public void setOnLink( final String flag ) { 808 onLink = nval( getRequestParameter( flag ),onLink ); 809 } 810 811 /** 812 * 【TAG】ファイルの存在チェックを行うかどうか[true/false]を指定します(初期値:false)。 813 * 814 * @og.tag 815 * "true"の場合は、ファイルの存在チェックを行い、ファイルがあれば 816 * リンクを張ります。ファイルが存在しない場合は, 何も表示されません。 817 * 初期値は、 "false"(ファイルチェックを行わない)です。 818 * 注意:現状、viewLink タグからの使用は出来ませんので、ご了承願います。 819 * 820 * @param flag 存在チェック[true:行う/false:行わない]) 821 */ 822 public void setFileCheck( final String flag ) { 823 fileCheck = nval( getRequestParameter( flag ),fileCheck ); 824 } 825 826 /** 827 * 【TAG】アドレスにファイルのディレクトリ直接のアドレスを指定するかどうか[true/false]設定します(初期値:false)。 828 * 829 * @og.tag 830 * "true"の場合は、ファイルの物理ディレクトリをリンクします。 831 * 初期値は、 "false"(ファイルの直接アドレスを行わない)です。 832 * 833 * @param flag ファイルのディレクトリ直接のアドレスの指定[true:直接アドレス/その他:通常のURL] 834 */ 835 public void setFilePath( final String flag ) { 836 filePath = nval( getRequestParameter( flag ),filePath ); 837 } 838 839 /** 840 * 【TAG】画面ID属性を登録します。 841 * 842 * @og.tag 843 * gamenId 属性は、画面IDをキーに、実アドレスを求めるのに使用します。 844 * 画面IDが指定された場合は、実アドレスに変換する。指定されない場合は、 845 * href 属性をそのままリンク情報を作成します。 846 * 画面IDを指定する場合の href は、JSPファイル名(例えば、index.jsp 等)です。 847 * 848 * @og.rev 3.1.2.0 (2003/04/07) リンク指定時に、画面IDを渡して、実アドレスを求める事ができる様にする。 849 * 850 * @param id 画面ID属性 851 */ 852 public void setGamenId( final String id ) { 853 gamenId = nval( getRequestParameter( id ),gamenId ); 854 } 855 856 /** 857 * 【TAG】GAMENID,BACK_GAMENID 属性を付加するかどうか[true/false]を設定します(初期値:true)。 858 * 859 * @og.tag 860 * "true"の場合は、GAMENID,BACK_GAMENID 属性を href に追加します。(?KEY1=VAL1&KEY2=VAL2・・・) 861 * "false"の場合は、付加しません。 862 * JavaScript や、通常のファイル( .html や .pdf 等)に、GAMENID,BACK_GAMENID 属性を付けないように 863 * する事が出来ます。 864 * 初期値は、 "true"(GAMENID,BACK_GAMENID 属性を href に追加する)です。 865 * 866 * @og.rev 3.1.8.0 (2003/05/16) GAMENID属性のURLへの自動セットを行うかどうかを決める属性( useGamenId )を追加。 867 * 868 * @param flag BACK_GAMENID 属性を付加するかどうか[true:追加する/その他:追加しない] 869 */ 870 public void setUseGamenId( final String flag ) { 871 useGamenId = nval( getRequestParameter( flag ),useGamenId ); 872 } 873 874 /** 875 * 【TAG】処理するマークを、"|"区切りの文字列で指定します。 876 * 877 * @og.tag 878 * markListで与えられた文字列に、onLink文字列(大文字/小文字の区別あり)が 879 * 含まれていれば、処理します。 880 * 例えば、"A","B","C" という文字列が、onLink で指定された 881 * 場合に処理するようにしたい場合は、"A|B|C" をセットします。 882 * markList には、[カラム名]指定が可能です。 883 * 初期値は、 "true|TRUE|1"です。 884 * 885 * @og.rev 3.5.2.0 (2003/10/20) 新規追加 886 * 887 * @param list 処理するマーク(indexOf による含む/含まない判定) 888 */ 889 public void setMarkList( final String list ) { 890 markList = nval( getRequestParameter( list ),markList ); 891 } 892 893 /** 894 * 【TAG】href ではなく、xlink:href を使用するかどうか[true/false]を指定します(初期値:false)。 895 * 896 * @og.tag 897 * xlink:href 属性は、XMLでのリンクを指定します。その場合、href 属性で指定した 898 * 内容は、xlink:href に置き換えられます。 899 * また、URL文字列の接続文字列(&)を、(&amp;)で接続します。これは、xlink として、 900 * XMLファイルに埋め込む場合に、置き換えが必要な為です。 901 * 初期値は、 "false"(通常の href) です。 902 * 903 * @og.rev 3.5.5.0 (2004/03/12) 新規追加 904 * 905 * @param lnk XMLリンクを使用するかどうか[true:使用する/false:使用しない] 906 */ 907 public void setXlink( final String lnk ) { 908 xlink = nval( getRequestParameter( lnk ),xlink ); 909 } 910 911 /** 912 * 【TAG】ダイレクトジャンプを使用するかどうか[true/false]を指定します(初期値:false)。 913 * 914 * @og.tag 915 * ダイレクトジャンプ(指定の画面へ直接飛ばす)は、簡易ワークフロー的に、画面への 916 * リンクを作成する場合に使用します。一般には、メール本文に記述して、指定の画面まで 917 * 直接飛ばす場合に使用します。 918 * このリンクは、その画面の index.jsp に直接ジャンプします。 919 * 920 * gamenId を指定しなければ、この画面が指定されたと考えます。 921 * target を指定しなければ、"_blank" を指定します。 922 * msg がなければ(または、BODY部が空の場合)、画面名にこのリンクを作成します。 923 * 初期値は、 "false"(使用しない) です。 924 * 925 * @og.rev 3.7.1.0 (2005/04/26) 新規追加 926 * 927 * @param directJump ダイレクトジャンプを使用するかどうか[true:使用する/false:使用しない] 928 */ 929 public void setUseDirectJump( final String directJump ) { 930 useDirectJump = nval( getRequestParameter( directJump ),useDirectJump ); 931 } 932 933 /** 934 * 【TAG】リクエストキャッシュ情報を使用するかどうか[true/false]を指定します(初期値:true)。 935 * 936 * @og.tag 937 * リクエストキャッシュ情報は、戻るリンクで画面を差表示(command=RENEW)する場合に 938 * 最後に検索に利用された情報をキャッシュしておき、再利用する場合に利用する値です。 939 * ダイレクトジャンプ機能(useDirectJum=true)の場合のみ有効です。 940 * 戻るリンクによる再表示は、各画面自身が持っている情報を利用しますが、 941 * ダイレクトジャンプ等で、すでにキャッシュが存在していない(セッションが異なっている) 942 * 場合に、リンク情報に直接紐付けて、再検索させる必要がある場合に利用します。 943 * このキャッシュは、keys,vals による値の再設定で、書き換えることが可能です。 944 * 945 * 初期値は、 "true"(使用する) です。 946 * 947 * @og.rev 3.7.1.0 (2005/04/26) 新規追加 948 * 949 * @param useCache リクエストキャッシュ情報を使用するかどうか[true:使用する/false:使用しない] 950 */ 951 public void setUseRequestCache( final String useCache ) { 952 useRequestCache = nval( getRequestParameter( useCache ),useRequestCache ); 953 } 954 955 /** 956 * 【TAG】リクエストキャッシュ情報使用時に使用しない(削除する)キーをCSV形式で複数指定します。 957 * 958 * @og.tag 959 * リクエストキャッシュ情報には、一般に検索時に使用されたすべての引数が 960 * 使用されます。この引数を、転送先画面では、使用しないケースがあり、その場合に、 961 * 指定のキー情報を、削除します。 962 * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 963 * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。 964 * 965 * @og.rev 3.7.1.0 (2005/04/26) 新規追加 966 * 967 * @param key 使用しない(削除する)キーをCSV形式で複数指定 968 */ 969 public void setDelKeys( final String key ) { 970 delKeys = getCSVParameter( key ); 971 } 972 973 /** 974 * 【TAG】ダイレクトジャンプリンク時のハッシュ化されたURLの有効期間を日数を指定します 975 * (初期値:LINK_VALID_DURATION_DAYS[={@og.value org.opengion.hayabusa.common.SystemData#LINK_VALID_DURATION_DAYS}])。 976 * 977 * @og.tag 978 * ダイレクトジャンプリンクの引数を作成する場合、有効期限を指定できます。 979 * ここでは、設定時刻からの有効期間を日数指定します。 980 * 実際には、GE17のvalidDateカラムに設定される、日付と現在日を比較して、 981 * 有効かどうかを判断します。 982 * ゼロが指定された場合は、制限なしに設定されます。マイナスの場合は、初期値が使われます。 983 * (初期値:ユーザー定数のLINK_VALID_DURATION_DAYS[={@og.value org.opengion.hayabusa.common.SystemData#LINK_VALID_DURATION_DAYS}])。 984 * 985 * @og.rev 4.0.0.0 (2005/09/30) 新規追加 986 * 987 * @param validDura URLの有効期間日数 988 * @see org.opengion.hayabusa.common.SystemData#LINK_VALID_DURATION_DAYS 989 */ 990 public void setValidDuration( final String validDura ) { 991 validDuration = nval( getRequestParameter( validDura ),validDuration ); 992 } 993 994 /** 995 * 【TAG】リンク(アンカータグ)ではなく、href 属性をそのまま返すかどうか[true/false]を指定します(初期値:false)。 996 * 997 * @og.tag 998 * 通常のリンクは、アンカータグ(aタグ)の状態で出力されます。その場合、HTML上では 999 * リンクとして表示されます。このフラグをtrue にセットすると、リンク文字列 1000 * そのものが出力されます。これは、リンク文字列を作成してDBに登録する場合などに 1001 * 使用します。 1002 * 1003 * 初期値は、 "false"(リンク) です。 1004 * 1005 * @og.rev 4.0.0.0 (2005/11/30) 新規追加 1006 * 1007 * @param flag href 属性をそのまま返すかどうか(true:href属性/false:リンク) 1008 */ 1009 public void setHrefOnly( final String flag ) { 1010 hrefOnly = nval( getRequestParameter( flag ),hrefOnly ); 1011 } 1012 1013 /** 1014 * 【TAG】リンク(アンカータグ)ではなく、href 属性と、target属性を キーも含めて返すかどうか[true/false]を指定します(初期値:false)。 1015 * 1016 * @og.tag 1017 * 内容的には、hrefOnly と類似の機能で、アンカータグ(aタグ)の出力ではなく、href 属性と、 1018 * target属性を キーも含めて作成します。 1019 * 「href="*******" target="******"」 という形式になります。 1020 * これは、クリッカブルマップ等の href 属性と target属性の両方を使用するようなケースで使います。 1021 * また、onLink、markList を使ったリンク作成可否の処理をおこなった場合、通常であれば、 1022 * 指定のカラムの値が取得できますが、その場合は、先頭文字列が、href かどうかを判定することで、 1023 * リンク作成可否の判断が可能です。 1024 * 逆に言えば、この属性を true にセットした場合は、先頭文字列が、href で始まることが保障されます。 1025 * hrefOnly = true と同時に設定した場合は、hrefOnly が優先されます。 1026 * 1027 * 初期値は、 "false"(リンク) です。 1028 * 1029 * @og.rev 5.5.5.6 (2012/08/31) 新規追加 1030 * 1031 * @param flag 「href="*******" target="******"」 という形式をそのまま返すかどうか(true:href,target属性/false:リンク) 1032 */ 1033 public void setHrefTarget( final String flag ) { 1034 hrefTarget = nval( getRequestParameter( flag ),hrefTarget ); 1035 } 1036 1037 /** 1038 * 【TAG】リンクアドレスにURLチェック用の確認キーを付加するかどうか[true/false]を指定します(初期値:false)。 1039 * 1040 * @og.tag 1041 * この属性は、URLCheckFilter(org.opengion.hayabusa.filter.URLCheckFilter)と合わせて使用します。 1042 * trueが指定された場合、リンクURLのパラメーターに、URL確認用のパラメーターが出力されます。 1043 * このパラメーターを、URLCheckFilterが復号化し、正式なアクセスであるかどうかの判定を行います。 1044 * 1045 * 初期値は、 "false"(確認キーを出力しない) です。 1046 * 1047 * @og.rev 4.3.7.0 (2009/06/01) 新規追加 1048 * 1049 * @param flag 暗号化するかかどうか [true:暗号化する/false:しない] 1050 * @see org.opengion.hayabusa.filter.URLCheckFilter 1051 */ 1052 public void setUseURLCheck( final String flag ) { 1053 useURLCheck = nval( getRequestParameter( flag ),useURLCheck ); 1054 } 1055 1056 /** 1057 * 【TAG】URLチェック用の確認キーに対して、リンクを開くことのできるユーザーIDを指定します(初期値:ログインユーザー)。 1058 * 1059 * @og.tag 1060 * URLチェック用の確認キーに対して、リンクを開くことのできるユーザーIDを 1061 * カンマ区切りで指定します。 1062 * "*"が指定された場合、ユーザーチェックは行われません。 1063 * 1064 * 初期値は、 ログインユーザーです。 1065 * 1066 * @og.rev 4.3.8.0 (2009/08/01) 新規追加 1067 * 1068 * @param user リンクにアクセス可能なユーザー一覧 1069 */ 1070 public void setUrlCheckUser( final String user ) { 1071 urlCheckUser = nval( getRequestParameter( user ),urlCheckUser ); 1072 } 1073 1074 /** 1075 * 【TAG】URLチェック用の確認キーに対して、リンクの有効期限を指定します(初期値:60分)。 1076 * 1077 * @og.tag 1078 * URLチェック用の確認キーに対して、リンクが生成されてからの有効期限を分単位で設定します。 1079 * 属性値の先頭に'D'をつけることで、日付指定を行うことができます。 1080 * (D20090612 ⇒ 20090612まで(当日を含む)は有効) 1081 * 1082 * 初期値は、現在時間を基準として+ "1440"(1日) です。 1083 * 1084 * @og.rev 4.3.8.0 (2009/08/01) 新規追加 1085 * 1086 * @param time リンクの有効期限(分) 1087 */ 1088 public void setUrlCheckTime( final String time ) { 1089 String tm = getRequestParameter( time ); 1090 1091 if( tm != null && tm.length() > 0 && tm.charAt( 0 ) == 'D' ) { 1092 if( tm.length() < 9 ) { 1093 String errMsg = "urlCheckTime属性の日付はYYYYMMDD形式で指定して下さい。" 1094 + " 値=" + tm ; // 5.1.8.0 (2010/07/01) errMsg 修正 1095 throw new HybsSystemException( errMsg ); 1096 } 1097 Calendar cal = new GregorianCalendar( 1098 Integer.valueOf( tm.substring( 1, 5 ) ) 1099 ,Integer.valueOf( tm.substring( 5, 7 ) ) - 1 1100 ,Integer.valueOf( tm.substring( 7, 9 ) ) ); 1101 urlCheckTime = cal.getTimeInMillis() + (long)1000 * 60 * 60 * 24 - System.currentTimeMillis(); 1102 } 1103 else { 1104 urlCheckTime = nval( tm, (long)60*24 ) * 1000 * 60; 1105 } 1106 } 1107 1108 /** 1109 * 【TAG】ファイルのhref 部分の一部をURLEncodeするかどうか[true/false]を指定します 1110 * (初期値:USE_HREF_URLENCODE[={@og.value org.opengion.hayabusa.common.SystemData#USE_HREF_URLENCODE}])。 1111 * 1112 * @og.tag 1113 * ファイル等のリンクで、keys,vals は、URLEncode していましたが、URL に相当する箇所は 1114 * http:// など URLEncode してはいけない箇所がある為、何もしていませんでした。 1115 * ファイルのダウンロード等で、ファイル名に、";" や "%" が存在すると、認識できないため 1116 * ファイルが見つからないエラーが発生していました。 1117 * useHrefEncode="true" にすることで、全面的にURLEncodeするのではなく、";" と "%" のみ、 1118 * "%3B" と "%25" に、URLEncodeします。 1119 * なお、ファイルに限定する意味で、useGamenId="false" の場合のみ、有効にします。 1120 * 1121 * (初期値:USE_HREF_URLENCODE[={@og.value org.opengion.hayabusa.common.SystemData#USE_HREF_URLENCODE}])。 1122 * 1123 * @og.rev 6.0.2.0 (2014/08/29) 新規追加 1124 * 1125 * @param useEnc ファイルのhref 部分の一部をURLEncodeするかどうか[true/false] 1126 */ 1127 public void setUseHrefEncode( final String useEnc ) { 1128 useHrefEncode = nval( getRequestParameter( useEnc ),useHrefEncode ); 1129 } 1130 1131 /** 1132 * このオブジェクトの文字列表現を返します。 1133 * 基本的にデバッグ目的に使用します。 1134 * 1135 * @return このクラスの文字列表現 1136 */ 1137 @Override 1138 public String toString() { 1139 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 1140 .println( "VERSION" ,VERSION ) 1141 .println( "column" ,column ) 1142 .println( "onLink" ,onLink ) 1143 .println( "fileCheck" ,fileCheck ) 1144 .println( "filePath" ,filePath ) 1145 .println( "baseURL" ,baseURL ) 1146 .println( "fileURL" ,fileURL ) 1147 .println( "gamenId" ,gamenId ) 1148 .println( "useGamenId" ,useGamenId ) 1149 .println( "markList" ,markList ) 1150 .println( "xlink" ,xlink ) 1151 .println( "useDirectJump" ,useDirectJump ) 1152 .println( "useRequestCache" ,useRequestCache) 1153 .println( "hrefOnly" ,hrefOnly ) 1154 .println( "hrefTarget" ,hrefTarget ) // 5.5.5.6 (2012/08/31) 1155 .println( "validDuration" ,validDuration ) 1156 .println( "keys" ,keys ) 1157 .println( "vals" ,vals ) 1158 .println( "delKeys" ,delKeys ) 1159 .println( "useURLCheck" ,useURLCheck ) 1160 .println( "urlCheckUser" ,urlCheckUser ) 1161 .println( "urlCheckTime" ,urlCheckTime ) 1162 .println( "Other..." ,getAttributes().getAttribute() ) 1163 .fixForm().toString() ; 1164 } 1165}