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 */ 016 package org.opengion.hayabusa.taglib; 017 018 import org.opengion.hayabusa.common.HybsSystem; 019 import org.opengion.hayabusa.common.HybsSystemException; 020 021 import static org.opengion.fukurou.util.StringUtil.nval ; 022 import org.opengion.fukurou.util.XHTMLTag; 023 024 /** 025 * TagSupport から継承されたサブクラスです? 026 * 027 * 汎用属? のsetterメソ?を持って?す? 028 * それ以外に、{@XXXX} 変数の対応と、lang属?のメソ?も用意して?す? 029 * 030 * ロケールは、ユーザー??の lang 属?をデフォルトで使用し? 031 * セ?されて???合?、リクエスト情報のロケールから取得します? 032 * 033 * ??は、{@XXXX} 変数が使用できます? 034 * これは、ServletRequest から、XXXX をキーに値を取り??こ?変数に 035 * 割り当てます?つまり?こ?XXXXをキーにリクエストすれ?? 036 * こ?変数に値をセ?することができます? 037 * 038 * http://localhost/query.jsp?KEY1=VLA1&KEY2=VAL2 039 * 040 * のようなリクエストで、{@KEY1} とすれば?VAL1 がセ?されます? 041 * 042 * こ?タグは、ラベル部?入力フィールド部???ブルタグの<td> 043 * により左右に?されます?HTML 表示時?、前後に<tr>タグで囲って, 044 * 整形できます? 045 * 046 * @og.group 画面部? 047 * 048 * @version 4.0 049 * @author Kazuhiko Hasegawa 050 * @since JDK5.0, 051 */ 052 abstract class HTMLTagSupport extends CommonTagSupport { 053 // 5.2.1.0 (2010/10/01) must , mustAny 属?を?動化します? 054 private String mustType = null; // 5.2.1.0 (2010/10/01) 055 056 /** 057 * Taglibの終?グが見つかったときに処??doEndTag() ?オーバ?ライドします? 058 * 059 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応?release2() ?doEndTag()で呼ぶ? 060 * @og.rev 4.0.0.0 (2005/11/30) ロール を?慮します? 061 * @og.rev 4.3.0.0 (2008/07/04) ロールモード?ルチ対? 062 * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属?対? 063 * 064 * @return 後続?? 065 */ 066 @Override 067 public int doEndTag() { 068 debugPrint(); // 4.0.0 (2005/02/28) 069 // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属?対? 070 if( useTag() ) { 071 // 4.0.0 (2005/11/30) ??ロールが?アクセス許可の場合?、?力します? 072 // if( getUser().isAccess( get( "roles" ) ) ) { 073 // jspPrint( makeTag() ); 074 // } 075 076 // 4.3.0.0 (2008/07/04) ロールモード?ルチ対? 077 if( getUser().isAccess( get( "roles" ) ) ) { 078 jspPrint( makeTag() ); 079 } 080 } 081 return(EVAL_PAGE); 082 } 083 084 /** 085 * タグリブオブジェクトをリリースします? 086 * キャ?ュされて再利用される?で、フィールド?初期設定を行います? 087 * 088 * @og.rev 5.2.1.0 (2010/10/01) mustType 属?を追?? 089 */ 090 @Override 091 protected void release2() { 092 super.release2(); 093 mustType = null; // 5.2.1.0 (2010/10/01) 094 } 095 096 /** 097 * ボタンを作?します? 098 * 099 * <button type="submit" name="名前" value="値"> 100 * 101 * @return ボタンタグ?? 102 */ 103 abstract protected String makeTag() ; 104 105 /** 106 * 【HTML】要?対して固有?名前(id)をつける場合に設定します? 107 * 108 * @og.tag 109 * 特別な使用方法として、id="FOCUS" とすることで、フィールド系要? 110 * フォーカスを移動させます?これは、そのペ?ジ?唯?? id 属?として使用ください? 111 * 112 * @param id 固有?名前 113 */ 114 @Override 115 public void setId( final String id ) { 116 set( "id",getRequestParameter( id ) ); 117 } 118 119 /** 120 * 【HTML】要?対して class 属?を設定します? 121 * 122 * @og.tag 123 * Javaの?使用上?class で作?できな?め?代用として 124 * clazz を使用して?す? 125 * html で作?される属?は?class で作?されます? 126 * 127 * @og.rev 3.5.0.0 (2003/09/17) set ではなく?add を利用します? 128 * 129 * @param cls classを表す文字? 130 */ 131 public void setClazz( final String cls ) { 132 add( "class",getRequestParameter( cls ) ); // 3.5.5.9 (2004/06/07) セパレータ引数付きのメソ?に変更 133 } 134 135 /** 136 * 【HTML】要???と他?属?値の??lang,xml:lang)を指定します? 137 * 138 * @og.tag 139 * HTMLの?属?に使われます??する?は、ISO 639で規定されて?「?コード?です? 140 * [ja/en/zh/…]などのほかに、en-US:アメリカ英語?en-cockney:コ?ニ?英?など? 141 * 副?を?する方法も定められて?す? 142 * ここでは、lang と xml:lang の両方に同じ値がセ?されます? 143 * タグの language 属?とは使用用途が異なります? 144 * 145 * @og.tag lang セ? 146 * 147 * @param lang ?[ja/en/zh/…] 148 */ 149 public void setLang( final String lang ) { 150 String lng = getRequestParameter( lang ); 151 if( lng != null ) { 152 set( "lang",lng ); 153 set( "xml:lang",lng ); 154 } 155 } 156 157 /** 158 * 【HTML】文字表記?方?dir)を指定します? 159 * 160 * @og.tag 161 * 当該要??書字方向を?する属?です? 162 * ltr で、左から右に、rtl で、右から左に並べます? 163 * 164 * @param dir (ltr:左から右、rtl:右から左 ) 165 */ 166 public void setDir( final String dir ) { 167 set( "dir",getRequestParameter( dir ) ); 168 } 169 170 /** 171 * 【HTML】要?対する補足?報(title)を設定します? 172 * 173 * @og.tag 174 * title セ?は、?タンなどに適用すると、?ウスオーバ?によりこ?メ?ージ? 175 * チップスのように表示されます?これを利用して、説明文を登録することが可能です? 176 * ここに登録した??が?メ?ージリソースに存在する場合?、そのメ?ージ? 177 * 存在しな??合?、そのままの値を設定します? 178 * 179 * @og.rev 3.5.5.8 (2004/05/20) メ?ージリソースから読み込んだ?を使用します? 180 * @og.rev 4.0.0.0 (2007/10/18) メ?ージリソース統? getResource().getMessage > getResource().getLabel ) 181 * 182 * @param title 補足?報(title) 183 */ 184 public void setTitle( final String title ) { 185 String str = nval( getRequestParameter( title ),null ); 186 if( str != null ) { 187 // set( "title",getResource().getMessage( str ) ); 188 set( "title",getResource().getLabel( str ) ); 189 } 190 } 191 192 /** 193 * 【HTML】この要?対して適用させるスタイルシー?style)を設定します? 194 * 195 * @og.tag 196 * タグにstyle属?を設定します?これは、キー:値; のセ?を?記述できます? 197 * 通常は、class属???id属?で登録しておき?lg;style type="text/css"> で 198 * 外部から?する方がソースは読み?くなります? 199 * 200 * @param style スタイルシー?style="color:red; font-size:24pt;" など) 201 */ 202 public void setStyle( final String style ) { 203 set( "style",getRequestParameter( style ) ); 204 } 205 206 /** 207 * 【TAG】その部品に対して変更が?来な??(readonly)?しま?サーバ?に送信され?? 208 * 209 * @og.tag 210 * INPUT/TEXTAREA 系に対して、指定可能です? 211 * readonly="readonly" , readonly="true" が指定された場合?、有効です? 212 * false も指定?としては、有効です?(大?小文字?区別も不? 213 * それ以外???、エラーとします? 214 * 215 * @og.rev 3.7.1.0 (2005/04/26) readonly,true,false が指定できるように変更? 216 * 217 * @param ronly 読み取り専用属?[readonly/true/false] 218 */ 219 public void setReadonly( final String ronly ) { 220 String readonly = nval( getRequestParameter( ronly ),null ); 221 if( readonly != null ) { 222 if( readonly.equalsIgnoreCase( "readonly" ) || 223 readonly.equalsIgnoreCase( "true" ) ) { 224 set( "readonly","readonly" ); 225 } 226 else if( ! readonly.equalsIgnoreCase( "false" ) ) { 227 String errMsg = "readonly には、[readonly,true,false]以外????できません? 228 + " readonly=[" + readonly + "]" + HybsSystem.CR ; 229 throw new HybsSystemException( errMsg ); 230 } 231 } 232 } 233 234 /** 235 * 【TAG】その部品に対して?択や変更が?来な??(disabled)?しま?サーバ?に送信されな?? 236 * 237 * @og.tag 238 * BUTTON/INPUT/OPTGROUP/OPTION/SELECT/TEXTAREA 系に対して、指定可能です? 239 * disabled="disabled" , disabled="true" が指定された場合?、有効です? 240 * false も指定?としては、有効です?(大?小文字?区別も不? 241 * それ以外???、エラーとします? 242 * 243 * @og.rev 3.7.1.0 (2005/04/26) disabled,true,false が指定できるように変更? 244 * 245 * @param dis 選択や変更が?来な??するかど?[disabled/true/false] 246 */ 247 public void setDisabled( final String dis ) { 248 String disabled = nval( getRequestParameter( dis ),null ); 249 if( disabled != null ) { 250 if( disabled.equalsIgnoreCase( "disabled" ) || 251 disabled.equalsIgnoreCase( "true" ) ) { 252 set( "disabled","disabled" ); 253 } 254 else if( ! disabled.equalsIgnoreCase( "false" ) ) { 255 String errMsg = "disabled には、[disabled/true/false]以外????できません? 256 + " disabled=[" + disabled + "]" + HybsSystem.CR ; 257 throw new HybsSystemException( errMsg ); 258 } 259 } 260 } 261 262 /** 263 * 【HTML】タブ?移動?(tabindex)を指定しま?0 ??32767)? 264 * 265 * @og.tag 266 * Tabキーを押したときに要?選択される?を指定します? 267 * 値には?択させた??番を数値で記述します? 268 * 269 * @param tabindex タブ?移動?(0 ??32767) 270 */ 271 public void setTabindex( final String tabindex ) { 272 set( "tabindex",getRequestParameter( tabindex ) ); 273 } 274 275 /** 276 * 【HTML】アクセスキー(alt+キーで直接??を割り当てます? 277 * 278 * @og.tag 279 * アクセスキーは、?ウスの使えな??も?リンクにジャンプする?ボタンを押す?入力フォー? 280 * フォーカスを移すなどの操作を簡単に行うことができるように??されたものです? 281 * Windows の「ファイル(F)」メニューにつ??、F と同じような働きをします? 282 * 283 * @param accesskey アクセスキー 284 */ 285 public void setAccesskey( final String accesskey ) { 286 set( "accesskey",getRequestParameter( accesskey ) ); 287 } 288 289 /** 290 * 【TAG】JavaScript などの HTML基本タグ以外?属?を?そ?ままタグとして使用します? 291 * 292 * @og.tag 293 * JavaScript などの HTML基本タグ以外?属?を?そ?まま 294 * タグとして使用します?<del>そ?ときに?')は?")に置き換えます?</del> 295 * 296 * @og.rev 3.1.0.1 (2003/03/26) (')?")に置き換え??て?のを止める? 297 * 298 * @param optionAttributes HTML基本タグ以外?属? 299 */ 300 public void setOptionAttributes( final String optionAttributes ) { 301 String optAttri = getRequestParameter( optionAttributes ); 302 if( optAttri != null && optAttri.length() > 0 ) { 303 set( "optionAttributes",optAttri ); 304 } 305 } 306 307 /** 308 * 【HTML】JavaScriptのイベン?onClick を設定しま??onClick="renew('query.jsp','QUERY');")? 309 * 310 * @og.tag 311 * onClick をセ?します? 312 * 例えば?lt;og:column name="KBSAKU" onClick="renew('query.jsp','QUERY');" /> 313 * のように?することで、?ル?ンメニューの絞込み検索が可能になります? 314 * 315 * @og.rev 3.5.0.0 (2003/09/17) 新規追? 316 * @og.rev 3.5.5.9 (2004/06/07) セパレータ付きの追?ソ?に変更 317 * 318 * @param onClick onClickイベン??onClick="renew('query.jsp','QUERY');") 319 */ 320 public void setOnClick( final String onClick ) { 321 add( "onClick",getRequestParameter( onClick ),";" ); 322 } 323 324 /** 325 * 【HTML】JavaScriptのイベン?onChange を設定しま??onChange="renew('query.jsp','QUERY');")? 326 * 327 * @og.tag 328 * onChange をセ?します? 329 * 例えば?lt;og:column name="KBSAKU" onChange="renew('query.jsp','QUERY');" /> 330 * のように?することで、?ル?ンメニューの絞込み検索が可能になります? 331 * 332 * @og.rev 3.5.0.0 (2003/09/17) 新規追? 333 * @og.rev 3.5.5.9 (2004/06/07) セパレータ付きの追?ソ?に変更 334 * 335 * @param onChange onChangeイベン??onChange="renew('query.jsp','QUERY');") 336 */ 337 public void setOnChange( final String onChange ) { 338 add( "onChange",getRequestParameter( onChange ),";" ); 339 } 340 341 /** 342 * 【HTML】JavaScriptのイベン?onBlur を設定しま??onBlur="this.value=value.toUpperCase();")? 343 * 344 * @og.tag 345 * onBlur は、フォーカスが離れたときに発生するイベントです? 346 * 347 * @og.rev 4.0.0.0 (2005/11/30) 新規追? 348 * 349 * @param onBlur onBlurイベン??onBlur="this.value=value.toUpperCase();") 350 */ 351 public void setOnBlur( final String onBlur ) { 352 add( "onBlur",getRequestParameter( onBlur ),";" ); 353 } 354 355 /** 356 * 【HTML】JavaScriptのイベン?onFocus を設定します? 357 * 358 * @og.tag 359 * onFocus は、フォーカスされたときに発生するイベントです? 360 * 361 * @og.rev 4.0.0.0 (2005/11/30) 新規追? 362 * 363 * @param onFocus onFocusイベン? 364 */ 365 public void setOnFocus( final String onFocus ) { 366 add( "onFocus",getRequestParameter( onFocus ),";" ); 367 } 368 369 /** 370 * 【HTML】JavaScriptのイベン?onSelect を設定します? 371 * 372 * @og.tag 373 * onSelect は、テキストフィール??ストエリアの?ストが 374 * 選択されたときに発生するイベントです? 375 * 376 * @og.rev 4.0.0.0 (2005/11/30) 新規追? 377 * 378 * @param onSelect onSelectイベン? 379 */ 380 public void setOnSelect( final String onSelect ) { 381 add( "onSelect",getRequestParameter( onSelect ),";" ); 382 } 383 384 /** 385 * 【HTML】JavaScriptのイベン?ondblClick を設定します? 386 * 387 * @og.tag 388 * ondblClick は、?ウスで?ルクリ?されたときに発生するイベントです? 389 * 390 * @og.rev 4.0.0.0 (2005/11/30) 新規追? 391 * 392 * @param ondblClick ondblClickイベン? 393 */ 394 public void setOndblClick( final String ondblClick ) { 395 add( "ondblClick",getRequestParameter( ondblClick ),";" ); 396 } 397 398 /** 399 * 【HTML】JavaScriptのイベン?onMouseDown を設定します? 400 * 401 * @og.tag 402 * onMouseDown は、?ウス?ンされたときに発生するイベントです? 403 * 404 * @og.rev 4.0.0.0 (2005/11/30) 新規追? 405 * 406 * @param onMouseDown onMouseDownイベン? 407 */ 408 public void setOnMouseDown( final String onMouseDown ) { 409 add( "onMouseDown",getRequestParameter( onMouseDown ),";" ); 410 } 411 412 /** 413 * 【HTML】JavaScriptのイベン?onMouseUp を設定します? 414 * 415 * @og.tag 416 * onMouseUp は、?ウスア??されたときに発生するイベントです? 417 * 418 * @og.rev 4.0.0.0 (2005/11/30) 新規追? 419 * 420 * @param onMouseUp onMouseUpイベン? 421 */ 422 public void setOnMouseUp( final String onMouseUp ) { 423 add( "onMouseUp",getRequestParameter( onMouseUp ),";" ); 424 } 425 426 /** 427 * 【HTML】JavaScriptのイベン?onMouseMove を設定します? 428 * 429 * @og.tag 430 * onMouseMove は、?ウスが移動されたときに発生するイベントです? 431 * 432 * @og.rev 4.0.0.0 (2005/11/30) 新規追? 433 * 434 * @param onMouseMove onMouseMoveイベン? 435 */ 436 public void setOnMouseMove( final String onMouseMove ) { 437 add( "onMouseMove",getRequestParameter( onMouseMove ),";" ); 438 } 439 440 /** 441 * 【HTML】JavaScriptのイベン?onMouseOut を設定します? 442 * 443 * @og.tag 444 * onMouseOut は、?ウスが離れたときに発生するイベントです? 445 * 446 * @og.rev 4.0.0.0 (2005/11/30) 新規追? 447 * 448 * @param onMouseOut onMouseOutイベン? 449 */ 450 public void setOnMouseOut( final String onMouseOut ) { 451 add( "onMouseOut",getRequestParameter( onMouseOut ),";" ); 452 } 453 454 /** 455 * 【HTML】JavaScriptのイベン?onMouseOver を設定します? 456 * 457 * @og.tag 458 * onMouseOver は、?ウスが重なったときに発生するイベントです? 459 * 460 * @og.rev 4.0.0.0 (2005/11/30) 新規追? 461 * 462 * @param onMouseOver onMouseOverイベン? 463 */ 464 public void setOnMouseOver( final String onMouseOver ) { 465 add( "onMouseOver",getRequestParameter( onMouseOver ),";" ); 466 } 467 468 /** 469 * 【HTML】JavaScriptのイベン?onKeydown を設定します? 470 * 471 * @og.tag 472 * onKeydown は、キーが押されたときに発生するイベントです? 473 * 474 * @og.rev 4.0.0.0 (2005/11/30) 新規追? 475 * 476 * @param onKeydown onKeydownイベン? 477 */ 478 public void setOnKeydown( final String onKeydown ) { 479 add( "onKeydown",getRequestParameter( onKeydown ),";" ); 480 } 481 482 /** 483 * 【HTML】JavaScriptのイベン?onKeypress を設定します? 484 * 485 * @og.tag 486 * onKeypress は、キーが押され続けて?ときに発生するイベントです? 487 * 488 * @og.rev 4.0.0.0 (2005/11/30) 新規追? 489 * 490 * @param onKeypress onKeypressイベン? 491 */ 492 public void setOnKeypress( final String onKeypress ) { 493 add( "onKeypress",getRequestParameter( onKeypress ),";" ); 494 } 495 496 /** 497 * 【HTML】JavaScriptのイベン?onKeyup を設定します? 498 * 499 * @og.tag 500 * onKeyup は、キーが押された状態から離されたときに発生するイベントです? 501 * 502 * @og.rev 4.0.0.0 (2005/11/30) 新規追? 503 * 504 * @param onKeyup onKeyupイベン? 505 */ 506 public void setOnKeyup( final String onKeyup ) { 507 add( "onKeyup",getRequestParameter( onKeyup ),";" ); 508 } 509 510 /** 511 * 【TAG】ロールをセ?します? 512 * 513 * @og.tag 514 * ここで?したカラ?ールを?に、ユーザー毎?アクセス許可がチェ?されます? 515 * アクセス許可されな?、表示されません? 516 * こ?ロールを指定しな??合?、カラ?ソースのロールが使用されます? 517 * 518 * @og.rev 4.0.0.0 (2005/11/30) 新規追? 519 * 520 * @param roles ロール 521 */ 522 public void setRoles( final String roles ) { 523 set( "roles",getRequestParameter( roles ) ); 524 } 525 526 /** 527 * 【TAG】??入力を表す色に変えるかど?[true/false]を指定しま?初期値:false)? 528 * 529 * @og.tag 530 * 初期値は、??でな?"false") です? 531 * 532 * <og:input name="PN" must="true" /> 533 * 534 * @og.rev 5.2.1.0 (2010/10/01) 新規追? 535 * 536 * @param flag ??入力色に変えるかど?[true:??入?それ以???でない] 537 */ 538 public void setMust( final String flag ) { 539 mustType = nval( getRequestParameter( flag ),null ); 540 if( "true".equalsIgnoreCase( mustType ) ) { 541 mustType = "must"; 542 add( "class","must" ); 543 } 544 } 545 546 /** 547 * 【TAG】選択??入?どれかひとつ??)を表す色[true/mustAny/そ?他]を指定しま?初期値:無??? 548 * 549 * @og.tag 550 * ?のカラ???、どれかひとつを??とする選択??入力を示す色を指定します? 551 * true また?、mustAny を設定すると、class属?に、mustAny がセ?されます? 552 * mustAny は、CSSファイルに初期設定されて?す?true また?、mustAny 以外?値をセ? 553 * すると、その値がそのまま、class属?にセ?されます?で?択??のグループ化? 554 * 可能です? 555 * なお?実際の選択??入力チェ?は、ここではなく?columnCheck タグで?が?です? 556 * 自動???、mustAny="true" ??場合?み有効です? 557 * 初期値は、無?です? 558 * 559 * @og.rev 5.2.1.0 (2010/10/01) 新規追? 560 * 561 * @param flag 選択??入の?[true/mustAny/そ?他] 562 */ 563 public void setMustAny( final String flag ) { 564 if( mustType == null ) { // must 属?と同時設定時には、must 属?を優先します? 565 mustType = nval( getRequestParameter( flag ),null ); 566 if( "true".equalsIgnoreCase( mustType ) ) { 567 mustType = "mustAny"; 568 } 569 add( "class",mustType ); // mustType == null の場合?、add されません? 570 } 571 } 572 573 /** 574 * mustType 属?を取得します? 575 * 576 * must , mustAny 属?を設定する?合に、mustType 属?を設定します? 577 * そ?設定された値を取り?します? 578 * 何も設定されて??態では、null を返します? 579 * 580 * @og.rev 5.2.1.0 (2010/10/01) 新規追?? 581 * 582 * @return mustType属? 583 */ 584 protected String getMustType() { 585 return mustType ; 586 } 587 588 /** 589 * must , mustAny 属?を?動化するためのhiddenタグを生成します? 590 * 591 * HybsSystem.MUST_KEY + mustType をキーに、指定?カラ?を?として 592 * hidden を作?します?こ?値?columnChack タグで拾って must 処?ます? 593 * なお?must , mustAny 属?を使用して???合?、null を返します? 594 * 595 * @og.rev 5.2.1.0 (2010/10/01) 新規追?? 596 * 597 * @param name must?するカラ??名称 598 * 599 * @return 自動化するためのhiddenタグ 600 */ 601 protected String makeMustHidden( final String name ) { 602 String rtn = null; 603 if( mustType != null ) { 604 rtn = XHTMLTag.hidden( HybsSystem.MUST_KEY + mustType, name ); 605 } 606 return rtn; 607 } 608 }