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.hayabusa.common.HybsSystem; 019import org.opengion.hayabusa.common.HybsSystemException; 020 021import static org.opengion.fukurou.util.StringUtil.nval ; 022 023import org.opengion.fukurou.util.TagBuffer; 024import org.opengion.fukurou.util.XHTMLTag; 025 026/** 027 * TagSupport から継承されたサブクラスです。 028 * 029 * 汎用属性 のsetterメソッドを持っています。 030 * それ以外に、{@XXXX} 変数の対応と、lang属性のメソッドも用意しています。 031 * 032 * ロケールは、ユーザー情報の lang 属性をデフォルトで使用し、 033 * セットされていない場合は、リクエスト情報のロケールから取得します。 034 * 035 * 各属性は、{@XXXX} 変数が使用できます。 036 * これは、ServletRequest から、XXXX をキーに値を取り出し,この変数に 037 * 割り当てます。つまり、このXXXXをキーにリクエストすれば、 038 * この変数に値をセットすることができます。 039 * 040 * http://localhost/query.jsp?KEY1=VLA1&KEY2=VAL2 041 * 042 * のようなリクエストで、{@KEY1} とすれば、 VAL1 がセットされます。 043 * 044 * このタグは、ラベル部分と入力フィールド部分がテーブルタグの<td> 045 * により左右に分割されます。HTML 表示時は、前後に<tr>タグで囲って, 046 * 整形できます。 047 * 048 * ※ readonly , disabled , autofocus[HTML5] , required[HTML5] は、論理属性です。 049 * 通常は、キーワードのみの指定で、有効です。 050 * よって、readonly="false" としても、readonly というキーワードが存在すると、有効になります。 051 * 記述例 @readonly Areadonly="" Breadonly="readonly" の3種類が推奨されます。 052 * 「属性名」 「属性名=""」 「属性名="属性名"」 053 * フレームワーク側の問題として、@やAの渡し方は他の属性との関係や、動的なリクエスト変数の処理の 054 * 関係で、Bを利用します。また、動的切替の為に、Creadonly="[true/false]" も受け付けます。 055 * 内部的には、readonly="true" の場合は、readonly="readonly" を作成し、readonly="false" の場合は、 056 * なにも作成しないという処理を行っています。 057 * 058 * @og.group 画面部品 059 * 060 * @version 4.0 061 * @author Kazuhiko Hasegawa 062 * @since JDK5.0, 063 */ 064abstract class HTMLTagSupport extends CommonTagSupport { 065 //* このプログラムのVERSION文字列を設定します。 {@value} */ 066 private static final String VERSION = "5.7.2.0 (2014/01/10)" ; 067 068 private static final long serialVersionUID = 572020140110L ; 069 070 // 5.8.4.1 (2014/02/20) AimaiPicker のタイプに対応したキーワード 071 private static final String[] AIMAI_TEXT = new String[] { " V ", " V*", "*V ", "*V*" }; 072 private static final String[] AIMAI_TITL = new String[] { "完全一致", "前方一致", "後方一致", "前後曖昧" }; 073 074 // 5.2.1.0 (2010/10/01) must , mustAny 属性を自動化します。 075 private String mustType = null; // 5.2.1.0 (2010/10/01) 076 // 5.7.2.0 (2014/01/10) 自動化の制御をできるようにします。(初期は自動) 077 private boolean useMustHidden = true; // 5.7.2.0 (2014/01/10) 078 079 // 5.8.4.1 (2014/02/20) aimai 属性を追加。 080 private int aimai = -1; // 6.2.0.0 (2015/01/30) 081 082 /** 083 * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。 084 * 085 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 086 * @og.rev 4.0.0.0 (2005/11/30) ロール を考慮します。 087 * @og.rev 4.3.0.0 (2008/07/04) ロールモードマルチ対応 088 * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応 089 * 090 * @return 後続処理 091 */ 092 @Override 093 public int doEndTag() { 094 debugPrint(); // 4.0.0 (2005/02/28) 095 // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応 096 if( useTag() && getUser().isAccess( get( "roles" ) ) ) { // 4.3.0.0 (2008/07/04) ロールモードマルチ対応 097 jspPrint( makeTag() ); 098 } 099 return EVAL_PAGE ; 100 } 101 102 /** 103 * タグリブオブジェクトをリリースします。 104 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 105 * 106 * @og.rev 5.2.1.0 (2010/10/01) mustType 属性を追加。 107 * @og.rev 5.7.2.0 (2014/01/10) useMustHidden追加 108 * @og.rev 5.8.4.1 (2015/02/20) aimai追加 109 */ 110 @Override 111 protected void release2() { 112 super.release2(); 113 mustType = null; // 5.2.1.0 (2010/10/01) 114 useMustHidden = true; // 5.7.2.0 (2013/12/10) 115 aimai = -1; // 5.8.4.1 (2015/02/20) 116 } 117 118 /** 119 * ボタンを作成します。 120 * 121 * <button type="submit" name="名前" value="値"> 122 * 123 * @return ボタンタグ文字列 124 */ 125 abstract protected String makeTag() ; 126 127 /** 128 * 【HTML】要素に対して固有の名前(id)をつける場合に設定します。 129 * 130 * @og.tag 131 * 特別な使用方法として、id="FOCUS" とすることで、フィールド系要素に 132 * フォーカスを移動させます。これは、そのページ内で唯一の id 属性として使用ください。 133 * 134 * ※ HTML5 より、autofocus属性の使用が可能になりました。 135 * 136 * @param id 固有の名前 137 */ 138 @Override 139 public void setId( final String id ) { 140 set( "id",getRequestParameter( id ) ); 141 } 142 143 /** 144 * 【HTML】要素に対して class 属性を設定します。 145 * 146 * @og.tag 147 * Javaの言語使用上、class で作成できないため、代用として 148 * clazz を使用しています。 149 * html で作成される属性は、 class で作成されます。 150 * 151 * @og.rev 3.5.0.0 (2003/09/17) set ではなく、add を利用します。 152 * 153 * @param cls classを表す文字列 154 */ 155 public void setClazz( final String cls ) { 156 add( "class",getRequestParameter( cls ) ); // 3.5.5.9 (2004/06/07) セパレータ引数付きのメソッドに変更 157 } 158 159 /** 160 * 【HTML】要素の内容と他の属性値の言語(lang,xml:lang)を指定します。 161 * 162 * @og.tag 163 * HTMLの言語属性に使われます。指定する値は、ISO 639で規定されている「言語コード」です。 164 * [ja/en/zh/…]などのほかに、en-US:アメリカ英語、en-cockney:コックニー英語 など、 165 * 副言語を指定する方法も定められています。 166 * ここでは、lang と xml:lang の両方に同じ値がセットされます。 167 * タグの language 属性とは使用用途が異なります。 168 * 169 * @og.tag lang セット 170 * 171 * @param lang 言語[ja/en/zh/…] 172 */ 173 public void setLang( final String lang ) { 174 String lng = getRequestParameter( lang ); 175 if( lng != null ) { 176 set( "lang",lng ); 177 set( "xml:lang",lng ); 178 } 179 } 180 181 /** 182 * 【HTML】文字表記の方向(dir)を指定します。 183 * 184 * @og.tag 185 * 当該要素の書字方向を指定する属性です。 186 * ltr で、左から右に、rtl で、右から左に並べます。 187 * 188 * @param dir (ltr:左から右、rtl:右から左 ) 189 */ 190 public void setDir( final String dir ) { 191 set( "dir",getRequestParameter( dir ) ); 192 } 193 194 /** 195 * 【HTML】要素に対する補足的情報(title)を設定します。 196 * 197 * @og.tag 198 * title セットは、ボタンなどに適用すると、マウスオーバーによりこのメッセージが 199 * チップスのように表示されます。これを利用して、説明文を登録することが可能です。 200 * ここに登録した文字列が、メッセージリソースに存在する場合は、そのメッセージを 201 * 存在しない場合は、そのままの値を設定します。 202 * 203 * @og.rev 3.5.5.8 (2004/05/20) メッセージリソースから読み込んだ文字を使用します。 204 * @og.rev 4.0.0.0 (2007/10/18) メッセージリソース統合( getResource().getMessage ⇒ getResource().getLabel ) 205 * 206 * @param title 補足的情報(title) 207 */ 208 public void setTitle( final String title ) { 209 String str = nval( getRequestParameter( title ),null ); 210 if( str != null ) { 211 set( "title",getResource().getLabel( str ) ); 212 } 213 } 214 215 /** 216 * 【HTML】この要素に対して適用させるスタイルシート(style)を設定します。 217 * 218 * @og.tag 219 * タグにstyle属性を設定します。これは、キー:値; のセットを複数記述できます。 220 * 通常は、class属性や、id属性で登録しておき、<style type="text/css"> で 221 * 外部から指定する方がソースは読みやすくなります。 222 * 223 * @param style スタイルシート(style="color:red; font-size:24pt;" など) 224 */ 225 public void setStyle( final String style ) { 226 set( "style",getRequestParameter( style ) ); 227 } 228 229 /** 230 * 【TAG】その部品に対して変更が出来ないように(readonly)指定します(サーバーに送信される)。 231 * 232 * @og.tag 233 * INPUT/TEXTAREA 系に対して、指定可能です。 234 * readonly="readonly" , readonly="true" が指定された場合は、有効です。 235 * false も指定値としては、有効です。(大文字小文字の区別も不要) 236 * それ以外の指定は、エラーとします。 237 * 238 * ※ readonly は、論理属性です。 239 * 240 * @og.rev 3.7.1.0 (2005/04/26) readonly,true,false が指定できるように変更。 241 * 242 * @param ronly 読み取り専用属性[readonly/true/false] 243 */ 244 public void setReadonly( final String ronly ) { 245 String readonly = nval( getRequestParameter( ronly ),null ); 246 if( readonly != null ) { 247 if( "readonly".equalsIgnoreCase( readonly ) || 248 "true".equalsIgnoreCase( readonly ) ) { 249 set( "readonly","readonly" ); 250 } 251 else if( ! "false".equalsIgnoreCase( readonly ) ) { 252 String errMsg = "readonly には、[readonly,true,false]以外の文字は指定できません。" 253 + " readonly=[" + readonly + "]" + HybsSystem.CR ; 254 throw new HybsSystemException( errMsg ); 255 } 256 } 257 } 258 259 /** 260 * 【TAG】その部品に対して、選択や変更が出来ないように(disabled)指定します(サーバーに送信されない)。 261 * 262 * @og.tag 263 * BUTTON/INPUT/OPTGROUP/OPTION/SELECT/TEXTAREA 系に対して、指定可能です。 264 * disabled="disabled" , disabled="true" が指定された場合は、有効です。 265 * false も指定値としては、有効です。(大文字小文字の区別も不要) 266 * それ以外の指定は、エラーとします。 267 * 268 * ※ disabled は、論理属性です。 269 * 270 * @og.rev 3.7.1.0 (2005/04/26) disabled,true,false が指定できるように変更。 271 * 272 * @param dis 選択や変更が出来ないようにするかどうか[disabled/true/false] 273 */ 274 public void setDisabled( final String dis ) { 275 String disabled = nval( getRequestParameter( dis ),null ); 276 if( disabled != null ) { 277 if( "disabled".equalsIgnoreCase( disabled ) || 278 "true".equalsIgnoreCase( disabled ) ) { 279 set( "disabled","disabled" ); 280 } 281 else if( ! "false".equalsIgnoreCase( disabled ) ) { 282 String errMsg = "disabled には、[disabled/true/false]以外の文字は指定できません。" 283 + " disabled=[" + disabled + "]" + HybsSystem.CR ; 284 throw new HybsSystemException( errMsg ); 285 } 286 } 287 } 288 289 /** 290 * 【HTML】タブの移動順(tabindex)を指定します(0 〜 32767)。 291 * 292 * @og.tag 293 * Tabキーを押したときに要素が選択される順番を指定します。 294 * 値には、選択させたい順番を数値で記述します。 295 * 296 * @param tabindex タブの移動順(0 〜 32767) 297 */ 298 public void setTabindex( final String tabindex ) { 299 set( "tabindex",getRequestParameter( tabindex ) ); 300 } 301 302 /** 303 * 【HTML】アクセスキー(alt+キーで直接指定)を割り当てます。 304 * 305 * @og.tag 306 * アクセスキーは、マウスの使えない環境でも、リンクにジャンプする、ボタンを押す、入力フォームに 307 * フォーカスを移すなどの操作を簡単に行うことができるように考慮されたものです。 308 * Windows の「ファイル(F)」メニューについている、F と同じような働きをします。 309 * 310 * @param accesskey アクセスキー 311 */ 312 public void setAccesskey( final String accesskey ) { 313 set( "accesskey",getRequestParameter( accesskey ) ); 314 } 315 316 /** 317 * 【TAG】JavaScript などの HTML基本タグ以外の属性を、そのままタグとして使用します。 318 * 319 * @og.tag 320 * JavaScript などの HTML基本タグ以外の属性を、そのまま 321 * タグとして使用します。 322 * 323 * @og.rev 3.1.0.1 (2003/03/26) (')を(")に置き換え処理していたのを止める。 324 * 325 * @param optionAttributes HTML基本タグ以外の属性 326 */ 327 public void setOptionAttributes( final String optionAttributes ) { 328 String optAttri = getRequestParameter( optionAttributes ); 329 if( optAttri != null && optAttri.length() > 0 ) { 330 set( "optionAttributes",optAttri ); 331 } 332 } 333 334 /** 335 * 【HTML】JavaScriptのイベント onClick を設定します(例:onClick="renew('query.jsp','QUERY');")。 336 * 337 * @og.tag 338 * onClick をセットします。 339 * 例えば、<og:column name="KBSAKU" onClick="renew('query.jsp','QUERY');" /> 340 * のように指定することで、プルダウンメニューの絞込み検索が可能になります。 341 * 342 * @og.rev 3.5.0.0 (2003/09/17) 新規追加 343 * @og.rev 3.5.5.9 (2004/06/07) セパレータ付きの追加メソッドに変更 344 * 345 * @param onClick onClickイベント(例:onClick="renew('query.jsp','QUERY');") 346 */ 347 public void setOnClick( final String onClick ) { 348 add( "onClick",getRequestParameter( onClick ),";" ); 349 } 350 351 /** 352 * 【HTML】JavaScriptのイベント onChange を設定します(例:onChange="renew('query.jsp','QUERY');")。 353 * 354 * @og.tag 355 * onChange をセットします。 356 * 例えば、<og:column name="KBSAKU" onChange="renew('query.jsp','QUERY');" /> 357 * のように指定することで、プルダウンメニューの絞込み検索が可能になります。 358 * 359 * @og.rev 3.5.0.0 (2003/09/17) 新規追加 360 * @og.rev 3.5.5.9 (2004/06/07) セパレータ付きの追加メソッドに変更 361 * 362 * @param onChange onChangeイベント(例:onChange="renew('query.jsp','QUERY');") 363 */ 364 public void setOnChange( final String onChange ) { 365 add( "onChange",getRequestParameter( onChange ),";" ); 366 } 367 368 /** 369 * 【HTML】JavaScriptのイベント onBlur を設定します(例:onBlur="this.value=value.toUpperCase();")。 370 * 371 * @og.tag 372 * onBlur は、フォーカスが離れたときに発生するイベントです。 373 * 374 * @og.rev 4.0.0.0 (2005/11/30) 新規追加 375 * 376 * @param onBlur onBlurイベント(例:onBlur="this.value=value.toUpperCase();") 377 */ 378 public void setOnBlur( final String onBlur ) { 379 add( "onBlur",getRequestParameter( onBlur ),";" ); 380 } 381 382 /** 383 * 【HTML】JavaScriptのイベント onFocus を設定します。 384 * 385 * @og.tag 386 * onFocus は、フォーカスされたときに発生するイベントです。 387 * 388 * @og.rev 4.0.0.0 (2005/11/30) 新規追加 389 * 390 * @param onFocus onFocusイベント 391 */ 392 public void setOnFocus( final String onFocus ) { 393 add( "onFocus",getRequestParameter( onFocus ),";" ); 394 } 395 396 /** 397 * 【HTML】JavaScriptのイベント onSelect を設定します。 398 * 399 * @og.tag 400 * onSelect は、テキストフィールド/テキストエリアのテキストが 401 * 選択されたときに発生するイベントです。 402 * 403 * @og.rev 4.0.0.0 (2005/11/30) 新規追加 404 * 405 * @param onSelect onSelectイベント 406 */ 407 public void setOnSelect( final String onSelect ) { 408 add( "onSelect",getRequestParameter( onSelect ),";" ); 409 } 410 411 /** 412 * 【HTML】JavaScriptのイベント ondblClick を設定します。 413 * 414 * @og.tag 415 * ondblClick は、マウスでダブルクリックされたときに発生するイベントです。 416 * 417 * @og.rev 4.0.0.0 (2005/11/30) 新規追加 418 * 419 * @param ondblClick ondblClickイベント 420 */ 421 public void setOndblClick( final String ondblClick ) { 422 add( "ondblClick",getRequestParameter( ondblClick ),";" ); 423 } 424 425 /** 426 * 【HTML】JavaScriptのイベント onMouseDown を設定します。 427 * 428 * @og.tag 429 * onMouseDown は、マウスダウンされたときに発生するイベントです。 430 * 431 * @og.rev 4.0.0.0 (2005/11/30) 新規追加 432 * 433 * @param onMouseDown onMouseDownイベント 434 */ 435 public void setOnMouseDown( final String onMouseDown ) { 436 add( "onMouseDown",getRequestParameter( onMouseDown ),";" ); 437 } 438 439 /** 440 * 【HTML】JavaScriptのイベント onMouseUp を設定します。 441 * 442 * @og.tag 443 * onMouseUp は、マウスアップされたときに発生するイベントです。 444 * 445 * @og.rev 4.0.0.0 (2005/11/30) 新規追加 446 * 447 * @param onMouseUp onMouseUpイベント 448 */ 449 public void setOnMouseUp( final String onMouseUp ) { 450 add( "onMouseUp",getRequestParameter( onMouseUp ),";" ); 451 } 452 453 /** 454 * 【HTML】JavaScriptのイベント onMouseMove を設定します。 455 * 456 * @og.tag 457 * onMouseMove は、マウスが移動されたときに発生するイベントです。 458 * 459 * @og.rev 4.0.0.0 (2005/11/30) 新規追加 460 * 461 * @param onMouseMove onMouseMoveイベント 462 */ 463 public void setOnMouseMove( final String onMouseMove ) { 464 add( "onMouseMove",getRequestParameter( onMouseMove ),";" ); 465 } 466 467 /** 468 * 【HTML】JavaScriptのイベント onMouseOut を設定します。 469 * 470 * @og.tag 471 * onMouseOut は、マウスが離れたときに発生するイベントです。 472 * 473 * @og.rev 4.0.0.0 (2005/11/30) 新規追加 474 * 475 * @param onMouseOut onMouseOutイベント 476 */ 477 public void setOnMouseOut( final String onMouseOut ) { 478 add( "onMouseOut",getRequestParameter( onMouseOut ),";" ); 479 } 480 481 /** 482 * 【HTML】JavaScriptのイベント onMouseOver を設定します。 483 * 484 * @og.tag 485 * onMouseOver は、マウスが重なったときに発生するイベントです。 486 * 487 * @og.rev 4.0.0.0 (2005/11/30) 新規追加 488 * 489 * @param onMouseOver onMouseOverイベント 490 */ 491 public void setOnMouseOver( final String onMouseOver ) { 492 add( "onMouseOver",getRequestParameter( onMouseOver ),";" ); 493 } 494 495 /** 496 * 【HTML】JavaScriptのイベント onKeydown を設定します。 497 * 498 * @og.tag 499 * onKeydown は、キーが押されたときに発生するイベントです。 500 * 501 * @og.rev 4.0.0.0 (2005/11/30) 新規追加 502 * 503 * @param onKeydown onKeydownイベント 504 */ 505 public void setOnKeydown( final String onKeydown ) { 506 add( "onKeydown",getRequestParameter( onKeydown ),";" ); 507 } 508 509 /** 510 * 【HTML】JavaScriptのイベント onKeypress を設定します。 511 * 512 * @og.tag 513 * onKeypress は、キーが押され続けていたときに発生するイベントです。 514 * 515 * @og.rev 4.0.0.0 (2005/11/30) 新規追加 516 * 517 * @param onKeypress onKeypressイベント 518 */ 519 public void setOnKeypress( final String onKeypress ) { 520 add( "onKeypress",getRequestParameter( onKeypress ),";" ); 521 } 522 523 /** 524 * 【HTML】JavaScriptのイベント onKeyup を設定します。 525 * 526 * @og.tag 527 * onKeyup は、キーが押された状態から離されたときに発生するイベントです。 528 * 529 * @og.rev 4.0.0.0 (2005/11/30) 新規追加 530 * 531 * @param onKeyup onKeyupイベント 532 */ 533 public void setOnKeyup( final String onKeyup ) { 534 add( "onKeyup",getRequestParameter( onKeyup ),";" ); 535 } 536 537 /** 538 * 【HTML5】入力候補を提示して入力内容を自動補完する[on/off](初期値はon)。 539 * 540 * @og.tag 541 * HTML5から追加された新機能です。 542 * オートコンプリートを有効にする場合は、on 、無効にする場合は、off を設定します。 543 * 初期値は、on(有効) です。 544 * 545 * <datalist> タグを使用して、入力候補となるデータリストを定義できます。 546 * 各データのリスト項目は、<option>で定義します。 <datalist>をサポートしたブラウザでは、 547 * <option>で指定された値がユーザーに対して入力候補として提案表示されます。 548 * <input>のlist属性の値と<datalist>のid属性の値を同じにして、入力欄と 549 * データリストを関連付けます。 550 * 551 * 利用可能type:[text,search,url,tel,email,password,datetime,date,month,week,time,datetime-local,number,range,color] 552 * 553 * <pre> 554 * <og:input type="text" name="yourarea" autocomplete="on" list="tokyo" /> 555 * 556 * <og:datalist id="tokyo" > 557 * <og:option value="渋谷" /> 558 * <og:option value="新宿" /> 559 * <og:option value="池袋" /> 560 * </og:datalist>< 561 * </pre> 562 * 563 * @og.rev 5.7.1.0 (2013/12/06) 新規追加 564 * 565 * @param autocomplete 入力候補の自動補完の設定 [on/off](初期値はon) 566 * @see <a href="http://www.htmq.com/html5/input_autocomplete.shtml">autocomplete</a> 567 */ 568 public void setAutocomplete( final String autocomplete ) { 569 set( "autocomplete" , getRequestParameter( autocomplete ) ); 570 } 571 572 /** 573 * 【HTML5】指定した入力欄にカーソルが当たって自動的にフォーカスされます。 574 * 575 * @og.tag 576 * HTML5から追加された新機能です。 577 * autofocus属性を指定すると、ウェブページが表示された際に、 578 * 指定した入力欄にカーソルが当たって自動的にフォーカスされます。 579 * 580 * autofocus="autofocus" , autofocus="true" が指定された場合は、有効です。 581 * false も指定値としては、有効です。(大文字小文字の区別も不要) 582 * それ以外の指定は、エラーとします。 583 * 584 * 利用可能type:[text,search,url,tel,email,password] 585 * 586 * ※ autofocus は、論理属性です。 587 * 588 * <pre> 589 * <og:input type="text" name="userid" autofocus="autofocus" /> 590 * </pre> 591 * 592 * @og.rev 5.7.1.0 (2013/12/06) 新規追加 593 * 594 * @param atfocus カーソルが当たって自動的にフォーカスされる 595 * @see <a href="http://www.htmq.com/html5/input_autofocus.shtml">autofocus</a> 596 */ 597 public void setAutofocus( final String atfocus ) { 598 String autofocus = nval( getRequestParameter( atfocus ),null ); 599 if( autofocus != null ) { 600 if( "autofocus".equalsIgnoreCase( autofocus ) || 601 "true".equalsIgnoreCase( autofocus ) ) { 602 set( "autofocus","autofocus" ); 603 } 604 else if( ! "false".equalsIgnoreCase( autofocus ) ) { 605 String errMsg = "autofocus には、[autofocus,true,false]以外の文字は指定できません。" 606 + " autofocus=[" + autofocus + "]" + HybsSystem.CR ; 607 throw new HybsSystemException( errMsg ); 608 } 609 } 610 } 611 612 /** 613 * 【HTML5】正規表現で入力値のパターンを指定します。 614 * 615 * @og.tag 616 * HTML5から追加された新機能です。 617 * 正規表現を使って入力値のパターンを指定することができます。 618 * 619 * 利用可能type:[text,search,url,tel,email,password] 620 * 621 * <pre> 622 * <og:input type="text" name="userid" pattern="^[0-9A-Za-z]+$" /> ※半角英数 623 * </pre> 624 * 625 * @og.rev 5.7.1.0 (2013/12/06) 新規追加 626 * 627 * @param pattern 正規表現で入力値のパターンを指定 628 * @see <a href="http://www.htmq.com/html5/input_pattern.shtml">pattern</a> 629 */ 630 public void setPattern( final String pattern ) { 631 set( "pattern",getRequestParameter( pattern ) ); 632 } 633 634 /** 635 * 【HTML5】入力欄に初期表示する内容を指定します。 636 * 637 * @og.tag 638 * HTML5から追加された新機能です。 639 * placeholder属性で指定した値が、入力欄に初期値として表示されます。 640 * 例えば、テキストフィールドに初期値として、 「検索するキーワードを入力してください」 641 * などのヒントを示してユーザーの操作を補助することができます。 642 * 643 * 利用可能type:[text,search,url,tel,email,password] 644 * 645 * <pre> 646 * <og:input type="search" name="q" placeholder="キーワードを入力" /> 647 * </pre> 648 * 649 * @og.rev 5.7.1.0 (2013/12/06) 新規追加 650 * 651 * @param placeholder 入力欄に初期表示する内容 652 * @see <a href="http://www.htmq.com/html5/input_placeholder.shtml">placeholder</a> 653 */ 654 public void setPlaceholder( final String placeholder ) { 655 set( "placeholder",getRequestParameter( placeholder ) ); 656 } 657 658 /** 659 * 【HTML5】ユーザーに入力候補として提案するデータリストの要素のid属性の値を指定します。 660 * 661 * @og.tag 662 * HTML5から追加された新機能です。 663 * ユーザーに入力候補として提案するデータリストタグ(<datalist>)のid属性を 664 * この、list 属性に設定することで、関連付けができます。 665 * 666 * ※ 667 * 内部事情で、list属性 に設定するキーも、datalistタグのid属性に設定するキーも、 668 * inputタグ(columnタグ)の name属性+".sel" を標準的に使用してください。 669 * 670 * 利用可能type:[text,search,url,tel,email,datetime,date,month,week,time,datetime-local,number,range,color] 671 * 672 * <pre> 673 * <og:input type="search" name="keywords" autocomplete="on" list="keywords.sel" /> 674 * <og:datalist id="keywords.sel"> 675 * <og:option value="ウィキペディア" /> 676 * <og:option value="ウィルス対策" /> 677 * <og:option value="ウィンドウズ" /> 678 * </og:datalist> 679 * </pre> 680 * 681 * @og.rev 5.7.1.0 (2013/12/06) 新規追加 682 * 683 * @param list 入力候補として提案するデータリストのid属性の値を指定 684 * @see <a href="http://www.htmq.com/html5/datalist.shtml">list</a> 685 */ 686 public void setList( final String list ) { 687 set( "list",getRequestParameter( list ) ); 688 } 689 690 /** 691 * 【HTML5】入力欄で入力できる最小値を指定します。 692 * 693 * @og.tag 694 * HTML5から追加された新機能です。 695 * 数値型や日付型の入力欄で入力できる最小値を指定することができます。 696 * 697 * 利用可能type:[datetime,date,month,week,time,datetime-local,number,range] 698 * 699 * <pre> 700 * <og:input type="number" name="ninzu" min="1" max="4" /> ※1人以上4人以下 701 * </pre> 702 * 703 * @og.rev 5.7.1.0 (2013/12/06) 新規追加 704 * 705 * @param min 入力できる最小値 706 * @see <a href="http://www.htmq.com/html5/input_min.shtml">min</a> 707 */ 708 public void setMin( final String min ) { 709 set( "min",getRequestParameter( min ) ); 710 } 711 712 /** 713 * 【HTML5】入力欄で入力できる最大値を指定します。 714 * 715 * @og.tag 716 * HTML5から追加された新機能です。 717 * 数値型や日付型の入力欄で入力できる最大値を指定することができます。 718 * 719 * 利用可能type:[datetime,date,month,week,time,datetime-local,number,range] 720 * 721 * <pre> 722 * <og:input type="number" name="ninzu" min="1" max="4" /> ※1人以上4人以下 723 * </pre> 724 * 725 * @og.rev 5.7.1.0 (2013/12/06) 新規追加 726 * 727 * @param max 入力できる最大値 728 * @see <a href="http://www.htmq.com/html5/input_min.shtml">max</a> 729 */ 730 public void setMax( final String max ) { 731 set( "max",getRequestParameter( max ) ); 732 } 733 734 /** 735 * 【HTML5】入力欄で刻むステップ値を指定する。 736 * 737 * @og.tag 738 * HTML5から追加された新機能です。 739 * step属性を指定すると、 数値型や日付型の入力欄で刻むステップ値を指定することができます。 740 * 741 * 利用可能type:[datetime,date,month,week,time,datetime-local,number,range] 742 * 743 * <pre> 744 * <og:input type="number" name="lot" step="0.5" /> ※単位0.5 745 * </pre> 746 * 747 * @og.rev 5.7.1.0 (2013/12/06) 新規追加 748 * 749 * @param step 入力欄で刻むステップ値 750 * @see <a href="http://www.htmq.com/html5/input_step.shtml">step</a> 751 */ 752 public void setStep( final String step ) { 753 set( "step",getRequestParameter( step ) ); 754 } 755 756 /** 757 * 【HTML5】入力必須を指定する。 758 * 759 * @og.tag 760 * HTML5から追加された新機能です。 761 * 入力項目が入力必須であることをブラウザに知らせることができます。 762 * 単独で、required 属性を使用できるようにしておきます。 763 * 764 * フレームワークの入力必須は、must 属性ですが、must 属性を指定した場合にも、 765 * システムリソースの USE_HTML5_HEADER を true に設定している場合は、 766 * required 属性を出力します。 767 * 768 * 利用可能type:[text,search,url,tel,email,datetime,date,month,week,time,datetime-local,number,checkbox,radio,file] 769 * 770 * ※ required は、論理属性です。 771 * 772 * <pre> 773 * <og:input type="text" name="yourname" required="required" /> 774 * </pre> 775 * 776 * @og.rev 5.7.1.0 (2013/12/06) 新規追加 777 * 778 * @param req 入力必須を指定 779 * @see <a href="http://www.htmq.com/html5/input_required.shtml">required</a> 780 */ 781 public void setRequired( final String req ) { 782 String required = nval( getRequestParameter( req ),null ); 783 if( required != null ) { 784 if( "required".equalsIgnoreCase( required ) || 785 "true".equalsIgnoreCase( required ) ) { 786 set( "required","required" ); 787 } 788 else if( ! "false".equalsIgnoreCase( required ) ) { 789 String errMsg = "required には、[required/true/false]以外の文字は指定できません。" 790 + " required=[" + required + "]" + HybsSystem.CR ; 791 throw new HybsSystemException( errMsg ); 792 } 793 } 794 } 795 796 /** 797 * 【TAG】ロールをセットします。 798 * 799 * @og.tag 800 * ここで指定したカラムロールを元に、ユーザー毎のアクセス許可がチェックされます。 801 * アクセス許可されないと、表示されません。 802 * このロールを指定しない場合は、カラムリソースのロールが使用されます。 803 * 804 * @og.rev 4.0.0.0 (2005/11/30) 新規追加 805 * 806 * @param roles ロール 807 */ 808 public void setRoles( final String roles ) { 809 set( "roles",getRequestParameter( roles ) ); 810 } 811 812 /** 813 * 【TAG】必須入力を表す色に変えるかどうか[true/false]を指定します(初期値:false)。 814 * 815 * @og.tag 816 * 初期値は、必須でない("false") です。 817 * <del>システムリソースの USE_HTML5_HEADER が、true に指定されている場合は、 818 * HTML5 適用として、required 属性も、出力します。</del> 819 * 820 * <og:input name="PN" must="true" /> 821 * 822 * @og.rev 5.2.1.0 (2010/10/01) 新規追加 823 * @og.rev 5.7.1.0 (2013/12/06) HTML5 対応(required属性)。 824 * @og.rev 5.9.3.3 (2015/12/26) requiredの自動セットはやめる 825 * 826 * @param flag 必須入力色に変えるかどうか[true:必須入力/それ以外:必須でない] 827 */ 828 public void setMust( final String flag ) { 829 mustType = nval( getRequestParameter( flag ),null ); 830 if( "true".equalsIgnoreCase( mustType ) ) { 831 mustType = "must"; 832 add( "class","must" ); 833 834 // 5.7.1.0 (2013/12/06) HTML5 対応(required属性)。 835 // HTML5のrequiredではダメなパターンがあるので、これはやめる。 836// if( isUseHTML5() ) { 837// set( "required","required" ); 838// } 839 } 840 } 841 842 /** 843 * 【TAG】選択必須入力(どれかひとつ必須)を表す色[true/mustAny/その他]を指定します(初期値:無指定)。 844 * 845 * @og.tag 846 * 複数のカラムのうち、どれかひとつを必須とする選択必須入力を示す色を指定します。 847 * true または、mustAny を設定すると、class属性に、mustAny がセットされます。 848 * mustAny は、CSSファイルに初期設定されています。true または、mustAny 以外の値をセット 849 * すると、その値がそのまま、class属性にセットされますので、選択必須のグループ化が 850 * 可能です。 851 * なお、実際の選択必須入力チェックは、ここではなく、columnCheck タグで指定が必要です。 852 * 自動処理は、mustAny="true" 指定の場合のみ有効です。 853 * 初期値は、無指定です。 854 * 855 * @og.rev 5.2.1.0 (2010/10/01) 新規追加 856 * 857 * @param flag 選択必須入の指定[true/mustAny/その他] 858 */ 859 public void setMustAny( final String flag ) { 860 if( mustType == null ) { // must 属性と同時設定時には、must 属性を優先します。 861 mustType = nval( getRequestParameter( flag ),null ); 862 if( "true".equalsIgnoreCase( mustType ) ) { 863 mustType = "mustAny"; 864 } 865 add( "class",mustType ); // mustType == null の場合は、add されません。 866 } 867 } 868 869 /** 870 * 【TAG】必須の自動チェック用Hiddenを出力するかどうか[true/false]を指定します(初期値:true)。 871 * 872 * @og.tag 873 * query.jsp上でmust/mustAny指定した場合に検索時の必須チェックを自動化するための 874 * hiddenを出力するかどうかを選択します。 875 * 初期値は、出力する("true") です。 876 * 通常は初期値で問題ありませんが、必須の切替をScriptで行う場合等に邪魔になる場合が 877 * あるため出力の切替を出来るようにしておきます。 878 * 879 * 880 * @og.rev 5.7.2.0 (2013/01/10) 新規作成 881 * 882 * @param flag 自動チェック用hiddenを出力するか[true:出力/それ以外:出力しない] 883 */ 884 public void setUseMustHidden( final String flag ) { 885 useMustHidden = nval( getRequestParameter( flag ),useMustHidden ); 886 } 887 888 /** 889 * 【TAG】曖昧検索可能フィールドとして、曖昧検索方法を指定します(初期値:null) 890 * 891 * @og.tag 892 * 従来は、clazz="aimai" として、点線の入力フィールドのみ作成していましたが、 893 * AimaiPicker をCallするようにして、検索方法を指定できるようにします。 894 * なお、AimaiPickerは、カラムの値に、選択した条件に応じた %を付与するため、 895 * result.jsp の like には、%を含めない様に記述してください。 896 * 897 * @ class="aimai" の設定 (ほぼ、従来と同じ) 898 * A AimaiPicker となる、preタグを出力(スペースを含む固定幅文字にするため) 899 * B aimai属性で、前方一致、後方一致、前後曖昧、完全一致 選択が可能 900 * C aimai属性で選択した検索方法を、submit時にvalueに反映し、result.jsp に送信する。 901 * 902 * aimai属性の指定方法を以下に示します。 903 * "0" または "V" :完全一致 904 * "1" または "V*" :前方一致 905 * "2" または "*V" :後方一致 906 * "3" または "*V*" :前後曖昧 907 * 908 * Vは、0,1,2,3 以外であれば、何でも構いません。* の位置で判定します。 909 * 910 * @og.rev 5.8.4.1 (2015/02/20) aimai 属性を追加。6.2.0.0 911 * 912 * @param val 曖昧検索指定 [0,V:完全一致/1,V*:前方一致/2,*V:後方一致/3,*V*:前後曖昧] 913 */ 914 public void setAimai( final String val ) { 915 String tmp = nval( getRequestParameter( val ),null ); 916 if( tmp != null && !tmp.isEmpty() ) { 917 add( "class","aimai" ); // class 設定は先に行う必要がある。 918 919 // 曖昧タイプは、0,1,2,3,null(指定が不明時) に再設定しなおします。 920 if( tmp.length() == 1 && "0,1,2,3".indexOf( tmp ) >= 0 ) { 921 aimai = Integer.parseInt( tmp ); 922 } 923 else { 924 int type = 0 ; // % が 0個 = V:完全一致 = 0 925 if( tmp.endsWith( "%" ) ) { type = 1; } // % が 後ろ=V%:前方一致 = 1 926 if( tmp.startsWith( "%" ) ) { type += 2; } // % が 前 =%V:後方一致 = 2 927 // 先にV%:前方一致(typeを加算)=%V%:前後曖昧 = 3 928 aimai = type; 929 } 930 } 931 } 932 933 /** 934 * mustType 属性を取得します。 935 * 936 * must , mustAny 属性を設定する場合に、mustType 属性を設定します。 937 * その設定された値を取り出します。 938 * 何も設定されていない状態では、null を返します。 939 * 940 * @og.rev 5.2.1.0 (2010/10/01) 新規追加。 941 * 942 * @return mustType属性 943 */ 944 protected String getMustType() { 945 return mustType ; 946 } 947 948 /** 949 * must , mustAny 属性を自動化するためのhiddenタグを生成します。 950 * 951 * HybsSystem.MUST_KEY + mustType をキーに、指定のカラム名を値として 952 * hidden を作成します。この値を columnChack タグで拾って must 処理します。 953 * なお、must , mustAny 属性を使用していない場合は、null を返します。 954 * 955 * @og.rev 5.2.1.0 (2010/10/01) 新規追加。 956 * @og.rev 5.7.2.0 (2014/01/10) useMustHidden対応 957 * 958 * @param name must指定するカラム等の名称 959 * 960 * @return 自動化するためのhiddenタグ 961 */ 962 protected String makeMustHidden( final String name ) { 963 String rtn = ""; 964 if( mustType != null && useMustHidden ) { // 5.7.2.0 (2014/01/10) 965 rtn = XHTMLTag.hidden( HybsSystem.MUST_KEY + mustType, name ); 966 } 967 return rtn; 968 } 969 970 /** 971 * aimai 属性を自動化するためのAimaiPicker関連タグを生成します。 972 * 973 * AIMAI_xxxのid属性をキーに、指定のカラムのvalue値の%付加を、JavaScriptで行います。 974 * そのための、preタグを出力します。 975 * 976 * @og.rev 5.8.4.1 (2015/02/20) aimai 属性を追加。6.2.0.0 addメソッドは現行ママとしておく 977 * 978 * @param name aimai指定するカラム 979 * 980 * @return 自動化するためのpreタグ 981 * @og.rtnNotNull 982 */ 983 protected String makeAimaiPicker( final String name ) { 984 if( aimai >= 0 ) { 985 TagBuffer tg = new TagBuffer( "pre" ); 986 tg.add( "id" , "AIMAI_" + name ); 987 tg.add( "class" , "aimaiClm" ); 988 tg.add( "aimaiType" , String.valueOf( aimai ) ); 989 tg.add( "title" , AIMAI_TITL[aimai] ); 990 tg.addBody( AIMAI_TEXT[aimai] ); 991 return tg.makeTag(); 992 993 } 994 return "" ; 995 } 996 997 /** 998 * HTML5を使用するかどうか(true:使用する/false:使用しない)を取得します。 999 * 1000 * HTML5 の機能を有効にするには、ネイティブモードで動作させる必要があります。 1001 * @ USE_IE7_HEADER = "false" に設定する。 1002 * A USE_HTML5_HEADER = "true" に設定する。 1003 * B IEのツール⇒互換表示設定で、互換表示に追加したWebサイトから削除する。 1004 * C 同上の設定で、イントラサイトを互換表示で表示するのチェックを外す。 1005 * 必要があります。 1006 * このメソッドで返すのは、@とAの設定ができていれば true、そうでなければ、false を返します。 1007 * 1008 * (初期値:USE_IE7_HEADER[={@og.value org.opengion.hayabusa.common.SystemData#USE_IE7_HEADER}])。 1009 * (初期値:USE_HTML5_HEADER[={@og.value org.opengion.hayabusa.common.SystemData#USE_HTML5_HEADER}])。 1010 * 1011 * @og.rev 5.7.1.0 (2013/12/06) 新規追加 1012 * 1013 * @return HTML5を使用するかどうか(true:使用する/false:使用しない) 1014 */ 1015 protected boolean isUseHTML5() { 1016 boolean useHTML5 = ! HybsSystem.sysBool( "USE_IE7_HEADER" ) // @ IE7互換モードが、false 1017 && HybsSystem.sysBool( "USE_HTML5_HEADER" ); // A HTML5 ヘッダーが true 1018 1019 return useHTML5 ; 1020 } 1021}