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