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