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 org.opengion.fukurou.util.XHTMLTag; 019import org.opengion.fukurou.util.ToString; // 6.1.1.0 (2015/01/17) 020import org.opengion.hayabusa.resource.GUIInfo; 021import org.opengion.fukurou.util.StringUtil ; // 6.2.0.0 (2015/02/27) 022 023import static org.opengion.fukurou.util.StringUtil.nval; 024 025/** 026 * テキストフィールドの入力を補助するポップアップを作成します。 027 * 028 * 通常のテキストフィールドに組み込むケースと、一覧表に組み込むケースに対応しています。 029 * 基本的には、columnMarker タグと同じ使い方ですが、フィールドが書き込み許可時に表示させる必要が 030 * あるため、実際には、viewMarker の isRendere="false" で使用するケースが多いと思います。 031 * なお、ポップアップ専用なので href="index.jsp" target="CONTENTS" がデフォルトで設定されています。 032 * 033 * @og.formSample 034 * ●形式:<og:popup gamenId="…" href="…" keys="…,…" vals="…,…" rtnKeys="…,…" /> 035 * ●body:なし 036 * 037 * ●Tag定義: 038 * <og:popup 039 * name 【TAG】この要素をリンクの対象とするための名前を指定します 040 * gamenId 【TAG】画面ID属性を登録します 041 * useGamenId 【TAG】GAMENID 属性を付加するかどうか[true/false]を設定します(初期値:true) 7.0.4.0 (2019/05/31) 042 * href 【TAG】ポップアップ先のURLを指定します(初期値:index.jsp) 043 * keys 【TAG】ポップアップ先に渡す入力キー配列をCSV形式で複数指定します 044 * vals 【TAG】ポップアップ先に渡す値配列をCSV形式で複数指定します 045 * rtnKeys 【TAG】ポップアップ先より受け取るキー配列をCSV形式で複数指定します 046 * column 【TAG】リンクをつけたいカラムを指定します 047 * onMark 【TAG】リンクを張る(true or 1)/張らない(false or 0)の設定を指定します(初期値:true) 048 * markList 【TAG】処理するマークを、"|"区切りの文字列で指定します 049 * height 【TAG】ダイアログの縦幅をピクセル数で指定します 050 * width 【TAG】ダイアログの横幅をピクセル数で指定します 051 * src 【TAG】表示させる画像のURLを指定します 052 * charset 【TAG】ポップアップ先の文字コードセットを指定します 053 * target 【TAG】ポップアップ先の表示ターゲットを指定します(初期値:CONTENTS) 054 * caseKey 【TAG】このタグ自体を利用するかどうかの条件キーを指定します(初期値:null) 055 * caseVal 【TAG】このタグ自体を利用するかどうかの条件値を指定します(初期値:null) 056 * caseNN 【TAG】指定の値が、null/ゼロ文字列 でない場合(Not Null=NN)は、このタグは使用されます(初期値:判定しない) 057 * caseNull 【TAG】指定の値が、null/ゼロ文字列 の場合は、このタグは使用されます(初期値:判定しない) 058 * caseIf 【TAG】指定の値が、true/TRUE文字列の場合は、このタグは使用されます(初期値:判定しない) 059 * id 【HTML】要素に対して固有の名前(id)をつける場合に設定します 060 * lang 【HTML】要素の内容と他の属性値の言語(lang,xml:lang)を指定します 061 * dir 【HTML】文字表記の方向(dir)を指定します 062 * title 【HTML】要素に対する補足的情報(title)を設定します 063 * style 【HTML】この要素に対して適用させるスタイルシート(style)を設定します 064 * tabindex 【HTML】タブの移動順(tabindex)を指定します(0 ~ 32767) 065 * accesskey 【HTML】アクセスキー(alt+キーで直接指定)を割り当てます 066 * clazz 【HTML】要素に対して class 属性を設定します 067 * onClick 【HTML】JavaScriptのイベント onClick を設定します(例:onClick="renew('query.jsp','QUERY');") 068 * lbl 【TAG】ラベルリソースのラベルIDを指定します 069 * language 【TAG】タグ内部で使用する言語コード[ja/en/zh/…]を指定します 070 * command 【TAG】(通常は使いません)処理の実行を指定する command を設定できます(初期値:NEW) 071 * append 【TAG】返ってきた値をキャレット位置に追記するかどうか(初期値:false) 072 * useSpan 【TAG】buttonではなくspanタグでポップアップを指定するかどうか[true/false]を設定します(初期値:false) 7.0.3.0 (2019/05/13) 073 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 074 * /> 075 * 076 * ●使用例 077 * ・普通のポップアップ 078 * <og:popup gamenId="GE0002" href="index.jsp" target="CONTENTS" 079 * keys="AAA,BBB,CCC" vals="{@AAA},{@B},ABC" 080 * rtnKeys="DDD,EEE" /> 081 * 082 * ・QUERYの入力フィールドに組み込む 083 * ①keys、vals、rtnKeys がセットされる場合 084 * セットされる keys に対して vals の値をポップアップ画面に渡し、ポップアップ画面の戻り値を rtnKeys にセットされます。 085 * <og:column name="AAA" value="{@AAA}" > 086 * <og:popup gamenId="GE0002" 087 * keys="AAA,BBB,CCC" vals="{@AAA},{@B},ABC" 088 * rtnKeys="DDD,EEE" /> 089 * </og:column> 090 * ②keys、vals、rtnKeys がセットされない場合 091 * ポップアップ画面にリクエスト変数 XNAME に外側のカラム名、XVALUE にカラムの入力値、rtnKeys にカラム名を自動的にセットされます。 092 * <og:column name="AAA" value="{@AAA}" > 093 * <og:popup gamenId="GE0002" /> 094 * </og:column> 095 * 096 * ・RESULTの入力フィールドに組み込む(viewMarker 経由) 097 * gamenId を指定しなければこの画面へのURLを作成します。 098 * このURLは、その画面の index.jsp に直接ジャンプするためのURLです。 099 * <og:viewMarker command="{@command}" isRenderer="false"> 100 * <og:popup gamenId="GE0002" column="ABC" onMark="[ABC]" markList="1|2|3" 101 * keys="AAA,BBB,CCC" vals="[AAA],[BBB].value,{@CCC}" 102 * rtnKeys="DDD,EEE" /> 103 * </og:viewMarker> 104 * 105 * ・ポップアップ側のJSPファイル(view 部分) 106 * 107 * @og.group 画面部品 108 * @og.rev 3.8.6.1 (2006/10/20) 新規作成 109 * 110 * @version 0.9.0 2000/10/17 111 * @author Kazuhiko Hasegawa 112 * @since JDK1.1, 113 */ 114public class PopupTag extends HTMLTagSupport { 115 /** このプログラムのVERSION文字列を設定します。 {@value} */ 116 private static final String VERSION = "7.0.4.0 (2019/05/31)" ; 117 private static final long serialVersionUID = 704020190531L ; 118 119 private static final String DEF_BODY = "▼" ; 120 private static final String DEF_STYLE = "width:20px;text-align:center;padding:0;" ; // 5.9.4.3 (2016/01/15) padding 121 122 /** command 引数に渡す事の出来る コマンド 新規 {@value} */ 123 private static final String CMD_NEW = "NEW" ; // 5.1.7.0 (2010/06/01) 124// private static final String VALUE_PRE = "this.form."; // 5.9.6.0 (2016/03/01) Spanはフォーム部品ではないのでthis.formが取れない 125 private static final String VALUE_PRE = "$(this).closest('form').get(0)."; // 5.10.11.2 (2019/05/17) jQuery 126// private static final String VALUE_PRE = "this.closest('form')."; // 7.0.3.0 (2019/05/13) CSS3の機能 127 128 private String command = CMD_NEW; // 5.1.7.0 (2010/06/01) 129 130 private String column ; 131 private String gamenId ; 132 private boolean useGamenId = true; // 7.0.4.0 (2019/05/31) … 初期値を他のタグと合わせる(互換性なし) 133 private String href = "index.jsp"; 134 private String target = "CONTENTS"; 135 private String onMark = "true"; // true または 1 136 private String markList = "true|TRUE|1"; // true または 1 137 private String height ; 138 private String width ; 139 private String imgsrc ; 140 private String[] keys ; 141 private String[] vals ; 142 private String[] rtnKeys ; 143 private String append = "false"; // 5.8.5.0 (2015/03/06) 144 private boolean useSpan ; // 7.0.3.0 (2019/05/13) 145 146 /** 147 * デフォルトコンストラクター 148 * 149 * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor. 150 */ 151 public PopupTag() { super(); } // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。 152 153 /** 154 * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。 155 * 156 * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応 157 * 158 * @return 後続処理の指示 159 */ 160 @Override 161 public int doEndTag() { 162 // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応 163 if( useTag() ) { 164 makeGamenLink(); 165 166 // GAMENID属性のURLへの自動セットは行わない。 167 final ViewMarkerTag viewMark = (ViewMarkerTag)findAncestorWithClass( this,ViewMarkerTag.class ); 168 // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..; 169 if( viewMark == null ) { 170 if( markList.indexOf( onMark ) >= 0 ) { 171 jspPrint( makePopup( false ) ); 172 } 173 } 174 else { 175 set( "onMark" ,onMark ); 176 set( "markList",markList ); 177 set( "body" ,makePopup( true ) ); 178 179 if( column != null && column.length() > 0 ) { 180 set( "column" ,column ); // 4.0.0 (2005/08/31) 同一カラムの複数登録を許可します。 181 viewMark.addAttribute( getAttributes() ); 182 } 183 } 184 } 185 return EVAL_PAGE ; 186 } 187 188 /** 189 * 使用しません。 190 * 191 * @return (null 固定) 192 */ 193 @Override 194 protected String makeTag() { return null; } 195 196 /** 197 * タグリブオブジェクトをリリースします。 198 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 199 * 200 * @og.rev 7.0.3.0 (2019/05/13) GAMENIDの追加(useGamenIdで、GAMENID属性をhrefに追加) 201 */ 202 @Override 203 protected void release2() { 204 super.release2(); 205 column = null; 206 gamenId = null; 207 useGamenId = true; // 7.0.4.0 (2019/05/31) 初期値を true に変更 208 href = "index.jsp"; 209 target = "CONTENTS"; 210 onMark = "true"; // true または 1 211 markList = "true|TRUE|1"; // true または 1 212 keys = null; 213 vals = null; 214 rtnKeys = null; 215 height = null; 216 width = null; 217 imgsrc = null; 218 command = CMD_NEW; // 5.1.7.0 (2010/06/01) 219 append = "false"; // 5.8.5.0 (2015/03/66) 220 useSpan = false; // 7.0.3.0 (2019/05/13) 221 } 222 223 /** 224 * リンクを作成します。 225 * 226 * @og.rev 4.2.4.0 (2008/07/01) keys,vals,rtnKeysが設定されていない場合、外側のog:columnタグのname値を設定するように変更 227 * @og.rev 5.1.7.0 (2010/06/01) 引数にcommandを追加 228 * @og.rev 5.2.1.0 (2010/10/01) height、width には、"px" などの単位を付ける前提での対応 229 * @og.rev 5.2.2.0 (2010/11/01) height、width が null の場合は、シングルクオートをつけない。 230 * @og.rev 6.2.0.0 (2015/02/27) onClick パラメータを設定できるようにし、後ろに、popupを追記します。 231 * @og.rev 5.8.5.0 (2015/03/06) append追加 232 * @og.rev 6.3.9.0 (2015/11/06) コンストラクタで初期化されていないフィールドを null チェックなしで利用している(findbugs) 233 * @og.rev 5.9.16.1 (2017/01/20) this.formの追加 234 * @og.rev 7.0.3.0 (2019/05/13) GAMENIDの追加(useGamenIdで、GAMENID属性をhrefに追加) 235 * 236 * @param useKey リンク作成時のキー有無 [true:KEY付き/false:KEY無し] 237 * 238 * @return リンクタグ文字列 239 * @og.rtnNotNull 240 */ 241 private String makePopup( final boolean useKey ) { 242 final StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE ); 243 // 5.2.1.0 (2010/10/01) px を付けると数字ではなくなるため、シングルクオーテーションでくくる。 244 rtn.append( "ogPopup( '" ).append( get( "href" ) ).append( "'," ); 245 // 5.2.2.0 (2010/11/01) height、width が null の場合は、シングルクオートをつけない。 246 // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..; 247 if( height == null ) { rtn.append( "null" ); } 248 else { rtn.append( '\'' ).append( height ).append( '\'' ); } 249 rtn.append( ',' ); // 6.0.2.5 (2014/10/31) char を append する。 250 // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..; 251 if( width == null ) { rtn.append( "null" ); } 252 else { rtn.append( '\'' ).append( width ).append( '\'' ); } 253 254 rtn.append( ',' ); // 6.0.2.5 (2014/10/31) char を append する。 255 256 // 7.0.3.0 (2019/05/13) GAMENIDの追加 257 final String GMN_KV = useGamenId && gamenId != null && !gamenId.isEmpty() 258 ? "'GAMENID','" + gamenId + "'," 259 : "" ; 260 261 String columnName = null; // 4.2.4.0 2008/07/01 262 // 6.3.9.0 (2015/11/06) コンストラクタで初期化されていないフィールドを null チェックなしで利用している(findbugs) 263 if( keys != null && keys.length > 0 && vals != null ) { 264 rtn.append( "new Array(" ) 265 .append( GMN_KV ); // 7.0.3.0 (2019/05/13) GAMENIDの追加 266 addQuote( rtn, keys[0], false ); 267 rtn.append( ',' ); // 6.0.2.5 (2014/10/31) char を append する。 268 addQuote( rtn, vals[0], false ); 269 for( int i=1; i<keys.length; i++ ) { 270 rtn.append( ',' ); // 6.0.2.5 (2014/10/31) char を append する。 271 addQuote( rtn, keys[i], false ); 272 rtn.append( ',' ); // 6.0.2.5 (2014/10/31) char を append する。 273 addQuote( rtn, vals[i], false ); 274 } 275 rtn.append( ")," ); 276 } 277 else { 278 final ColumnTag outerColumn = (ColumnTag) findAncestorWithClass( this, ColumnTag.class ); 279 columnName = ( outerColumn == null ) ? null : outerColumn.getName(); 280 // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..; 281 if( columnName == null ) { 282// rtn.append( "null," ); 283 if( GMN_KV.isEmpty() ) { // 7.0.3.0 (2019/05/13) GAMENIDの追加 284 rtn.append( "null," ); 285 } 286 else { 287 rtn.append( "new Array(" ) 288 .append( GMN_KV ); // 7.0.3.0 (2019/05/13) GAMENIDの追加 289 rtn.deleteCharAt( rtn.length()-1 ) // 最後の","を削除。(不要かも) 290 .append( ")," ); 291 } 292 } 293 else { 294 // 7.0.3.0 (2019/05/13) XNAME が使われていないので。 295 rtn.append( "new Array('" ) 296 .append( GMN_KV ) // 7.0.3.0 (2019/05/13) GAMENIDの追加 297 .append( columnName ) 298 .append( "'," ) 299 .append( VALUE_PRE ) // 5.9.16.1 (2017/01/20) 300 .append( columnName ) 301 .append( ".value)," ); 302 303// rtn.append( "new Array('XNAME','" ) 304// .append( columnName ) 305// .append( "','XVALUE'," ) 306// .append( VALUE_PRE ) // 5.9.16.1 (2017/01/20) 307// .append( columnName ) 308// .append( ".value)," ); 309 } 310 } 311 rtn.append( "" ); 312 313 if( rtnKeys != null && rtnKeys.length > 0 ) { 314 rtn.append( "this,new Array(" ); 315 addQuote( rtn, rtnKeys[0], useKey ); 316 for( int i=1; i<rtnKeys.length; i++ ) { 317 rtn.append( ',' ); // 6.0.2.5 (2014/10/31) char を append する。 318 addQuote( rtn, rtnKeys[i], useKey ); 319 } 320 rtn.append( ')' ); // 6.0.2.5 (2014/10/31) char を append する。 321 } 322 else if( columnName != null ) { 323 rtn.append( "this,new Array('" ) 324 .append( columnName ) 325 .append( "')" ); 326 } 327 else { 328 rtn.append( "null,null" ); 329 } 330 331 // 5.1.7.0 (2010/06/01) 引数にcommandを追加 332 // 5.8.5.0 (2015/03/06) append追加 333 rtn.append( ",'" ).append( command ).append( "','" ).append( append ).append( "');" ); 334 335 // 7.0.3.0 (2019/05/13) 判定の順番変更と link タグ対応 336 if( imgsrc != null ) { 337 set( "src" , imgsrc ); 338 set( "title" , getMsglbl() ); 339 add( "onClick", rtn.toString() , ";" ); // 6.2.0.0 (2015/02/27) onClick を追記します。 340 set( "style" , get( "style" ) ); 341 return XHTMLTag.img( getAttributes() ) ; 342 } 343 // 7.0.4.0 (2019/05/31) 344 else if( useSpan ) { 345 set( "body" , nval( getMsglbl(),DEF_BODY) ); 346 add( "onClick", rtn.toString() , ";" ); 347 set( "style" , nval( get( "style" ),DEF_STYLE) ); 348 set( "class" , "spanPopup" ); 349 return XHTMLTag.span( getAttributes() ) ; 350 } 351 else { 352 set( "type" , "button" ); 353 set( "body" , nval( getMsglbl(),DEF_BODY) ); 354 add( "onClick", rtn.toString() , ";" ); // 6.2.0.0 (2015/02/27) onClick を追記します。 355 set( "style" , nval( get( "style" ),DEF_STYLE) ); 356 return XHTMLTag.button( getAttributes() ) ; 357 } 358 359// if( imgsrc == null ) { 360// set( "type" , "button" ); 361// set( "body" , nval( getMsglbl(),DEF_BODY) ); 362// add( "onClick", rtn.toString() , ";" ); // 6.2.0.0 (2015/02/27) onClick を追記します。 363// set( "style" , nval( get( "style" ),DEF_STYLE) ); 364// return XHTMLTag.button( getAttributes() ) ; 365// } 366// else { 367// set( "src" , imgsrc ); 368// set( "title" , getMsglbl() ); 369// add( "onClick", rtn.toString() , ";" ); // 6.2.0.0 (2015/02/27) onClick を追記します。 370// set( "style" , get( "style" ) ); 371// return XHTMLTag.img( getAttributes() ) ; 372// } 373 } 374 375 /** 376 * 引数 val の設定値を設定する簡易メソッド。 377 * 378 * @og.rev 5.9.6.0 (2016/03/01) valueの取得の形を少し変える処理をここに入れる 379 * 380 * @param buf 結果を格納するStringBuilderオブジェクト 381 * @param val 設定値 382 * @param useKey リンク作成時のキー有無 [true:KEY付き/false:KEY無し] 383 * 384 * @return (引数のバッファと同じオブジェクト) 385 * @og.rtnNotNull 386 */ 387 private StringBuilder addQuote( final StringBuilder buf, final String val, final boolean useKey ) { 388 // 5.9.6.0 this.form.対応 389 String val2 = ""; 390 if( val != null && val.endsWith( ".value" ) && val.indexOf( '.' ) == val.lastIndexOf( '.' ) ){ 391 val2 = VALUE_PRE; 392 } 393 394 if( useKey ) { 395 if( val != null && val.endsWith( ".value" ) ) { 396 buf.append( val2 ).append( val.substring( 0,val.length()-6 ) ).append( "__{I}.value" ); // 5.9.6.0 397 } 398 else { 399 buf.append( '\'' ).append( val ).append( "__{I}'" ); 400 } 401 } 402 else { 403 if( val != null && val.endsWith( ".value" ) ) { 404 if( StringUtil.startsChar( val , '[' ) ) { // 6.2.0.0 (2015/02/27) 1文字 String.startsWith 405 buf.append( val2 ).append( val.substring( 1,val.length()-7 ) ).append( "__{I}.value" ); // 5.9.6.0 406 } 407 else { 408 buf.append( val2 ).append( val ); // 5.9.6.0 409 } 410 } 411 else { 412 buf.append( '\'' ).append( val ).append( '\'' ); 413 } 414 } 415 return buf ; 416 } 417 418 /** 419 * 画面IDとhref から、指定のURLを作成します。 420 */ 421 private void makeGamenLink() { 422 if( gamenId == null || gamenId.isEmpty() ) { return ; } 423 424 final GUIInfo guiInfo = getGUIInfo( gamenId ); // 4.0.0 (2005/01/31) 425 if( guiInfo == null ) { return ; } // 見つからない場合は、アクセス不可 426 427 final String address = guiInfo.getRealAddress( get( "href" ) ); 428 final String url = getRequestParameter( address ); 429 set( "href",url ); 430 431 if( get( "title" ) == null ) { 432 set( "title","To:" + guiInfo.getLabel() ); 433 } 434 } 435 436 /** 437 * 【TAG】この要素をリンクの対象とするための名前を指定します。 438 * 439 * @og.tag この要素をリンクの対象とするための名前を指定します。 440 * 441 * @param name 名前 442 */ 443 public void setName( final String name ) { 444 set( "name",getRequestParameter( name ) ); 445 } 446 447 /** 448 * 【TAG】リンクをつけたいカラムを指定します。 449 * 450 * @og.tag 451 * このカラム名のTableModelに対して、 ViewLink タグが存在する場合は、 452 * リンクを張ります。 453 * 454 * @param clm カラム名 455 */ 456 public void setColumn( final String clm ) { 457 column = nval( getRequestParameter( clm ),column ); 458 } 459 460 /** 461 * 【TAG】画面ID を指定します。 462 * 463 * @og.tag 464 * gamenId 属性は、画面IDをキーに、実アドレスを求めるのに使用します。 465 * 画面IDが指定された場合は、実アドレスに変換する。指定されない場合は、 466 * href 属性をそのままリンク情報を作成します。 467 * 画面IDを指定する場合の href は、JSPファイル名(例えば、index.jsp 等)です。 468 * 469 * @param id 画面ID 470 */ 471 public void setGamenId( final String id ) { 472 gamenId = nval( getRequestParameter( id ),gamenId ); 473 } 474 475 /** 476 * 【TAG】GAMENID 属性を付加するかどうか[true/false]を設定します(初期値:true)。 477 * 478 * @og.tag 479 * "true"の場合は、GAMENID 属性を href に追加します。(?KEY1=VAL1&KEY2=VAL2・・・) 480 * "false"の場合は、付加しません。 481 * popupなので、BACK_GAMENIDは付与しません。GAMENIDを付与することで、画面のロールやモードを 482 * 考慮したポップアップが起動します。 483 * 初期値を他のタグと合わせるため、true にしています(互換性はありません) 484 * 485 * @og.rev 7.0.3.0 (2019/05/13) GAMENIDの追加(useGamenIdで、GAMENID属性をhrefに追加) 486 * @og.rev 7.0.4.0 (2019/05/31) 初期値を true に変更 487 * 488 * @param flag GAMENID 属性を付加するかどうか [true:追加する/false:追加しない] 489 */ 490 public void setUseGamenId( final String flag ) { 491 useGamenId = nval( getRequestParameter( flag ),useGamenId ); 492 } 493 494 /** 495 * 【TAG】ポップアップ先のURLを指定します(初期値:index.jsp)。 496 * 497 * @og.tag 498 * 通常、gamenId を指定している場合は、それ以降(index.jsp , result.jsp など)を指定します。 499 * 通常のリンクの場合、GAMENID/href というアドレスに合成されます。( GE0001/result.jsp など ) 500 * (正確には、画面IDではなく、対応する画面ADDRESSを使用します。) 501 * ポップアップ専用のリンクなので、初期値は、index.jsp です。 502 * 503 * @param href ポップアップ先のURL 504 */ 505 public void setHref( final String href ) { 506 set( "href",nval( getRequestParameter( href ),this.href ) ); 507 } 508 509 /** 510 * 【TAG】ポップアップ先の文字コードセットを指定します。 511 * 512 * @og.tag ポップアップ先の文字コードセットを指定します。 513 * 514 * @param charset 文字コードセット 515 */ 516 public void setCharset( final String charset ) { 517 set( "charset",getRequestParameter( charset ) ); 518 } 519 520 /** 521 * 【TAG】ポップアップ先の表示ターゲットを指定します(初期値:CONTENTS)。 522 * 523 * @og.tag ポップアップ先の表示ターゲットを指定します。 524 * 525 * @param target 表示ターゲット 526 */ 527 public void setTarget( final String target ) { 528 set( "target",nval( getRequestParameter( target ),this.target ) ); 529 } 530 531 /** 532 * 【TAG】ポップアップ先に渡す入力キー配列をCSV形式で複数指定します。 533 * 534 * @og.tag ポップアップ先に渡す入力キー配列を指定します。 535 * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 536 * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。 537 * 538 * @param key 渡す入力キー配列(CSV形式) 539 */ 540 public void setKeys( final String key ) { 541 keys = getCSVParameter( key ); 542 } 543 544 /** 545 * 【TAG】ポップアップ先に渡す値配列をCSV形式で複数指定します。 546 * 547 * @og.tag ポップアップ先に渡す値配列を指定します。 548 * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 549 * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。 550 * 551 * @param val 渡す値配列(CSV形式) 552 */ 553 public void setVals( final String val ) { 554 vals = getCSVParameter( val ); 555 } 556 557 /** 558 * 【TAG】ポップアップ先より受け取るキー配列をCSV形式で複数指定します。 559 * 560 * @og.tag ポップアップ先より受け取るキー配列を指定します。 561 * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 562 * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。 563 * 564 * @param key 受け取るキー配列(CSV形式) 565 */ 566 public void setRtnKeys( final String key ) { 567 rtnKeys = getCSVParameter( key ); 568 } 569 570 /** 571 * 【TAG】マークを処理する(true or 1)/処理しない(false or 0)の設定を指定します(初期値:true)。 572 * 573 * @og.tag 574 * マークを処理する場合は、"true"(または "1") 575 * 処理しない場合は、"true以外"(または "0")をセットします。 576 * 初期値は、 "true"(マークを処理する)です。 577 * さらに、[カラム名] で、動的にカラムの値で、マークをする、しないを 578 * 選ぶ事が可能になります。値は、"true"(または "1") で、マークします。 579 * 追記 3.5.2.0 (2003/10/20):markList属性に、処理対象文字列郡を指定できます。 580 * これにより、マークを処理するかどうかの判断が、true,1 以外にも使用できるようになりました。 581 * 582 * @og.rev 3.5.0.0 (2003/09/17) onMark に、[カラム名] の値をセットできるように修正。 583 * 584 * @param flag マークの処理 [true,1:処理する/それ以外:処理しない] 585 */ 586 public void setOnMark( final String flag ) { 587 onMark = nval( getRequestParameter( flag ),onMark ); 588 } 589 590 /** 591 * 【TAG】処理するマークを含むような文字列を、"|"区切りの文字列で指定します(初期値:"true|TRUE|1")。 592 * 593 * @og.tag 594 * markListで与えられた文字列に、onMark文字列(大文字/小文字の区別あり)が 595 * 含まれていれば、処理します。 596 * 例えば、"A","B","C" という文字列が、onMark で指定された 597 * 場合に処理するようにしたい場合は、"A|B|C" をセットします。 598 * markList には、[カラム名]指定が可能です。(ただし、単独 linkタグ時は除く) 599 * 初期値は、 "true|TRUE|1"です。 600 * 601 * @param list 処理するマーク (indexOf による含む/含まない判定) 602 */ 603 public void setMarkList( final String list ) { 604 markList = nval( getRequestParameter( list ),markList ); 605 } 606 607 /** 608 * 【TAG】ダイアログの縦幅をピクセル数で指定します。 609 * 610 * @og.tag 611 * 縦幅を指定します。単位も含めて入力してください。 612 * 設定しない場合は、ogPopup JavaScript の内部初期値が採用されます。 613 * 614 * @og.rev 5.2.1.0 (2010/10/01) height、width には、"px" などの単位を付ける前提での対応 615 * 616 * @param ht ダイアログの縦幅(ピクセル数) 617 */ 618 public void setHeight( final String ht ) { 619 height = nval( getRequestParameter( ht ),height ); 620 if( height != null && ! height.endsWith( "px" ) ) { height += "px"; } // 5.2.1.0 (2010/10/01) 621 } 622 623 /** 624 * 【TAG】ダイアログの横幅をピクセル数で指定します。 625 * 626 * @og.tag 627 * 横幅を指定します。単位も含めて入力してください。 628 * 設定しない場合は、ogPopup JavaScript の内部初期値が採用されます。 629 * 630 * @og.rev 5.2.1.0 (2010/10/01) height、width には、"px" などの単位を付ける前提での対応 631 * 632 * @param wh ダイアログの横幅(ピクセル数) 633 */ 634 public void setWidth( final String wh ) { 635 width = nval( getRequestParameter( wh ),width ); 636 if( width != null && ! width.endsWith( "px" ) ) { width += "px"; } // 5.2.1.0 (2010/10/01) 637 } 638 639 /** 640 * 【TAG】表示させる画像のURLを指定します。 641 * 642 * @og.tag 643 * この属性を設定すると、自動的に イメージリンクでの onClick属性で 644 * ポップアップの起動画面を作成します。 645 * この属性が設定されていない場合は、button での起動になります。 646 * 647 * @param src 画像のURL 648 */ 649 public void setSrc( final String src ) { 650 imgsrc = nval( getRequestParameter( src ),imgsrc ); 651 } 652 653 /** 654 * 【TAG】(通常は使いません)処理の実行を指定する command を設定できます(初期値:NEW)。 655 * 656 * @og.tag 657 * ここで指定されたcommandは、ポップアップ画面の引数として渡されます。 658 * 初期値は、NEW です。 659 * 660 * @og.rev 5.1.7.0 (2010/06/01) 新規作成 661 * 662 * @param cmd コマンド 663 */ 664 public void setCommand( final String cmd ) { 665 command = nval( getRequestParameter( cmd ),command ); 666 } 667 668 /** 669 * 【TAG】返り値をキャレット位置に追記する(true)/しない(false)の設定を指定します(初期値:false)。 670 * 671 * @og.tag 672 * ポップアップからの返り値を、元の値と置換するのではなく、キャレット位置に挿入するかどうかを指定します。 673 * 674 * @og.rev 5.8.5.0 (2015/02/06) 675 * 676 * @param flg 返り値のキャレット位置に追記 [true:追記/それ以外:置換] 677 */ 678 public void setAppend( final String flg ) { 679 append = nval( getRequestParameter( flg ),append ); 680 } 681 682 /** 683 * 【TAG】buttonではなくテキストでポップアップを指定するかどうか[true/false]を設定します(初期値:false)。 684 * 685 * @og.tag 686 * "true"の場合は、spanタグでポップアップのベースとなるタグを作成します。 687 * false は従来通り、ボタンでポップアップのベースを作成します。 688 * srcを指定した場合は、imgタグでポップアップのベースを作成します。 689 * 互換性の関係から、初期値は、false にしています。 690 * 691 * @og.rev 7.0.3.0 (2019/05/13) buttonではなくspanタグでpopupするかどうか[true/false]を決める属性を追加。 692 * 693 * @param flag buttonではなくspanタグでポップアップするかどうか [true:する/false:しない] 694 */ 695 public void setUseSpan( final String flag ) { 696 useSpan = nval( getRequestParameter( flag ),useSpan ); 697 } 698 699 /** 700 * このオブジェクトの文字列表現を返します。 701 * 基本的にデバッグ目的に使用します。 702 * 703 * @return このクラスの文字列表現 704 * @og.rtnNotNull 705 */ 706 @Override 707 public String toString() { 708 return ToString.title( this.getClass().getName() ) 709 .println( "VERSION" ,VERSION ) 710 .println( "column" ,column ) 711 .println( "gamenId" ,gamenId ) 712 .println( "href" ,href ) 713 .println( "target" ,target ) 714 .println( "onMark" ,onMark ) 715 .println( "markList" ,markList ) 716 .println( "height" ,height ) 717 .println( "width" ,width ) 718 .println( "keys" ,keys ) 719 .println( "vals" ,vals ) 720 .println( "rtnKeys" ,rtnKeys ) 721 .println( "Other..." ,getAttributes().getAttribute() ) 722 .fixForm().toString() 723 + CR 724 + super.toString() ; 725 } 726}