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