001    /*
002     * Copyright (c) 2009 The openGion Project.
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     *     http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013     * either express or implied. See the License for the specific language
014     * governing permissions and limitations under the License.
015     */
016    package org.opengion.hayabusa.taglib;
017    
018    import org.opengion.hayabusa.common.HybsSystem;
019    import org.opengion.hayabusa.common.HybsSystemException;
020    
021    import static org.opengion.fukurou.util.StringUtil.nval ;
022    import org.opengion.fukurou.util.XHTMLTag;
023    
024    /**
025     * TagSupport から継承されたサブクラスです?
026     *
027     * 汎用属? のsetterメソ?を持って?す?
028     * それ以外に、{@XXXX} 変数の対応と、lang属?のメソ?も用意して?す?
029     *
030     * ロケールは、ユーザー??の lang 属?をデフォルトで使用し?
031     * セ?されて???合?、リクエスト情報のロケールから取得します?
032     *
033     * ??は、{@XXXX} 変数が使用できます?
034     * これは、ServletRequest から、XXXX をキーに値を取り??こ?変数に
035     * 割り当てます?つまり?こ?XXXXをキーにリクエストすれ??
036     * こ?変数に値をセ?することができます?
037     *
038     * http://localhost/query.jsp?KEY1=VLA1&KEY2=VAL2
039     *
040     * のようなリクエストで、{@KEY1} とすれば?VAL1 がセ?されます?
041     *
042     * こ?タグは、ラベル部?入力フィールド部???ブルタグの<td>
043     * により左右に?されます?HTML 表示時?、前後に<tr>タグで囲って,
044     * 整形できます?
045     *
046     * ※ readonly , disabled , autofocus[HTML5] , required[HTML5]  は、論理属?です?
047     * 通常は、キーワード?みの?で、有効です?
048     * よって、readonly="false" としても?readonly と?キーワードが存在すると、有効になります?
049     * 記述? ?eadonly ②readonly="" ③readonly="readonly" の?種類が推奨されます?
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     */
062    abstract class HTMLTagSupport extends CommonTagSupport {
063            // 5.2.1.0 (2010/10/01) must , mustAny 属?を?動化します?
064            private String  mustType        = null;         // 5.2.1.0 (2010/10/01)
065    
066            /**
067             * Taglibの終?グが見つかったときに処??doEndTag() ?オーバ?ライドします?
068             *
069             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応?release2() ?doEndTag()で呼ぶ?
070             * @og.rev 4.0.0.0 (2005/11/30) ロール を?慮します?
071             * @og.rev 4.3.0.0 (2008/07/04) ロールモード?ルチ対?
072             * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属?対?
073             *
074             * @return      後続??
075             */
076            @Override
077            public int doEndTag() {
078                    debugPrint();           // 4.0.0 (2005/02/28)
079                    // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属?対?
080                    if( useTag() ) {
081                            // 4.0.0 (2005/11/30) ??ロールが?アクセス許可の場合?、?力します?
082            //              if( getUser().isAccess( get( "roles" ) ) ) {
083            //                      jspPrint( makeTag() );
084            //              }
085    
086                            // 4.3.0.0 (2008/07/04) ロールモード?ルチ対?
087                            if( getUser().isAccess( get( "roles" ) ) ) {
088                                    jspPrint( makeTag() );
089                            }
090                    }
091                    return(EVAL_PAGE);
092            }
093    
094            /**
095             * タグリブオブジェクトをリリースします?
096             * キャ?ュされて再利用される?で、フィールド?初期設定を行います?
097             *
098             * @og.rev 5.2.1.0 (2010/10/01) mustType 属?を追??
099             */
100            @Override
101            protected void release2() {
102                    super.release2();
103                    mustType        = null;         // 5.2.1.0 (2010/10/01)
104            }
105    
106            /**
107             * ボタンを作?します?
108             *
109             * <button type="submit" name="名前" value="値">
110             *
111             * @return  ボタンタグ??
112             */
113            abstract protected String makeTag() ;
114    
115            /**
116             * 【HTML】要?対して固有?名前(id)をつける場合に設定します?
117             *
118             * @og.tag
119             * 特別な使用方法として、id="FOCUS" とすることで、フィールド系要?
120             * フォーカスを移動させます?これは、そのペ?ジ?唯?? id 属?として使用ください?
121             *
122             * ※ HTML5 より、autofocus属?の使用が可能になりました?
123             *
124             * @param   id 固有?名前
125             */
126            @Override
127            public void setId( final String id ) {
128                    set( "id",getRequestParameter( id ) );
129            }
130    
131            /**
132             * 【HTML】要?対して class 属?を設定します?
133             *
134             * @og.tag
135             * Javaの?使用上?class で作?できな?め?代用として
136             * clazz を使用して?す?
137             * html で作?される属?は?class で作?されます?
138             *
139             * @og.rev 3.5.0.0 (2003/09/17) set ではなく?add を利用します?
140             *
141             * @param   cls classを表す文字?
142             */
143            public void setClazz( final String cls ) {
144                    add( "class",getRequestParameter( cls ) );      // 3.5.5.9 (2004/06/07) セパレータ引数付きのメソ?に変更
145            }
146    
147            /**
148             * 【HTML】要???と他?属?値の??lang,xml:lang)を指定します?
149             *
150             * @og.tag
151             * HTMLの?属?に使われます??する?は、ISO 639で規定されて?「?コード?です?
152             * [ja/en/zh/…]などのほかに、en-US:アメリカ英語?en-cockney:コ?ニ?英?など?
153             * 副?を?する方法も定められて?す?
154             * ここでは、lang と xml:lang の両方に同じ値がセ?されます?
155             * タグの language 属?とは使用用途が異なります?
156             *
157             * @og.tag lang セ?
158             *
159             * @param   lang ?[ja/en/zh/…]
160             */
161            public void setLang( final String lang ) {
162                    String lng = getRequestParameter( lang );
163                    if( lng != null ) {
164                            set( "lang",lng );
165                            set( "xml:lang",lng );
166                    }
167            }
168    
169            /**
170             * 【HTML】文字表記?方?dir)を指定します?
171             *
172             * @og.tag
173             * 当該要??書字方向を?する属?です?
174             * ltr で、左から右に、rtl で、右から左に並べます?
175             *
176             * @param   dir (ltr:左から右、rtl:右から左 )
177             */
178            public void setDir( final String dir ) {
179                    set( "dir",getRequestParameter( dir ) );
180            }
181    
182            /**
183             * 【HTML】要?対する補足?報(title)を設定します?
184             *
185             * @og.tag
186             * title セ?は、?タンなどに適用すると、?ウスオーバ?によりこ?メ?ージ?
187             * チップスのように表示されます?これを利用して、説明文を登録することが可能です?
188             * ここに登録した??が?メ?ージリソースに存在する場合?、そのメ?ージ?
189             * 存在しな??合?、そのままの値を設定します?
190             *
191             * @og.rev 3.5.5.8 (2004/05/20) メ?ージリソースから読み込んだ?を使用します?
192             * @og.rev 4.0.0.0 (2007/10/18) メ?ージリソース統? getResource().getMessage > getResource().getLabel )
193             *
194             * @param   title 補足?報(title)
195             */
196            public void setTitle( final String title ) {
197                    String str = nval( getRequestParameter( title ),null );
198                    if( str != null ) {
199    //                      set( "title",getResource().getMessage( str ) );
200                            set( "title",getResource().getLabel( str ) );
201                    }
202            }
203    
204            /**
205             * 【HTML】この要?対して適用させるスタイルシー?style)を設定します?
206             *
207             * @og.tag
208             * タグにstyle属?を設定します?これは、キー:値; のセ?を?記述できます?
209             * 通常は、class属???id属?で登録しておき?lg;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                                    readonly.equalsIgnoreCase( "true"     ) ) {
238                                            set( "readonly","readonly" );
239                            }
240                            else if( ! readonly.equalsIgnoreCase( "false" ) ) {
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                                    disabled.equalsIgnoreCase( "true"     ) ) {
268                                            set( "disabled","disabled" );
269                            }
270                            else if( ! disabled.equalsIgnoreCase( "false" ) ) {
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             * タグとして使用します?<del>そ?ときに?')は?")に置き換えます?</del>
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             * 例えば?lt;og:column name="KBSAKU" onClick="renew('query.jsp','QUERY');" /&gt;
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             * 例えば?lt;og:column name="KBSAKU" onChange="renew('query.jsp','QUERY');" /&gt;
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             * &lt;datalist&gt; タグを使用して、?力?補となるデータリストを定義できます? 
535             * ?ータのリスト?目は?option&gt;で定義します? <datalist&gt;をサポ?トしたブラウザでは?
536             * &lt;option&gt;で?された値がユーザーに対して入力?補として提案表示されます? 
537             * &lt;input&gt;のlist属?の値と&lt;datalist&gt;の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             * &lt;og:input type="text" name="yourarea" autocomplete="on" list="tokyo" /&gt;
544             *
545             *  &lt;og:datalist id="tokyo" &gt;
546             *      &lt;og:option value="渋谷" /&gt;
547             *      &lt;og:option value="新宿" /&gt;
548             *      &lt;og:option value="?? /&gt;
549             *  &lt;/og:datalist&gt;&lt;
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             * &lt;og:input type="text" name="userid" autofocus="autofocus" /&gt;
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                                    autofocus.equalsIgnoreCase( "true"     ) ) {
591                                            set( "autofocus","autofocus" );
592                            }
593                            else if( ! autofocus.equalsIgnoreCase( "false" ) ) {
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             * &lt;og:input type="text" name="userid" pattern="^[0-9A-Za-z]+$" /&gt; ※半角英数
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             * &lt;og:input type="search" name="q" placeholder="キーワードを入? /&gt;
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             * ユーザーに入力?補として提案するデータリストタグ(&lt;datalist&gt;)のid属??
653             * こ?、list 属?に設定することで?連付けができます?
654             *
655             * 利用可能type:[text,search,url,tel,email,datetime,date,month,week,time,datetime-local,number,range,color]
656             *
657             * <pre>
658             *              &lt;og:input type="search" name="q" autocomplete="on" list="keywords" /&gt;
659             *              &lt;og:datalist id="keywords"&gt;
660             *                      &lt;og:option value="ウィキペディア" /&gt;
661             *                      &lt;og:option value="ウィルス対? /&gt;
662             *                      &lt;og:option value="ウィンドウズ" /&gt;
663             *              &lt;/og:datalist&gt;
664             * </pre>
665             *
666             * @og.rev 5.7.1.0 (2013/12/06) 新規追?
667             *
668             * @param       list 入力?補として提案するデータリスト?id属?の値を指?
669             * @see         <a href="http://www.htmq.com/html5/datalist.shtml">list</a>
670             */
671            public void setList( final String list ) {
672                    set( "list",getRequestParameter( list ) );
673            }
674    
675            /**
676             * 【HTML5】?力?入力できる??を指定します?
677             *
678             * @og.tag
679             * HTML5から追?れた新機?です?
680             *  数値型や日付型の入力?入力できる??を指定することができます?
681             *
682             * 利用可能type:[datetime,date,month,week,time,datetime-local,number,range]
683             *
684             * <pre>
685             * &lt;og:input type="number" name="ninzu" min="1" max="4" /&gt;??1人以?人以?
686             * </pre>
687             *
688             * @og.rev 5.7.1.0 (2013/12/06) 新規追?
689             *
690             * @param       min 入力できる??
691             * @see         <a href="http://www.htmq.com/html5/input_min.shtml">min</a>
692             */
693            public void setMin( final String min ) {
694                    set( "min",getRequestParameter( min ) );
695            }
696    
697            /**
698             * 【HTML5】?力?入力できる?値を指定します?
699             *
700             * @og.tag
701             * HTML5から追?れた新機?です?
702             *  数値型や日付型の入力?入力できる?値を指定することができます?
703             *
704             * 利用可能type:[datetime,date,month,week,time,datetime-local,number,range]
705             *
706             * <pre>
707             * &lt;og:input type="number" name="ninzu" min="1" max="4" /&gt;??1人以?人以?
708             * </pre>
709             *
710             * @og.rev 5.7.1.0 (2013/12/06) 新規追?
711             *
712             * @param       max 入力できる?値
713             * @see         <a href="http://www.htmq.com/html5/input_min.shtml">max</a>
714             */
715            public void setMax( final String max ) {
716                    set( "max",getRequestParameter( max ) );
717            }
718    
719            /**
720             * 【HTML5】?力?刻??プ?を指定する?
721             *
722             * @og.tag
723             * HTML5から追?れた新機?です?
724             * step属?を指定すると?数値型や日付型の入力?刻??プ?を指定することができます?
725             *
726             * 利用可能type:[datetime,date,month,week,time,datetime-local,number,range]
727             *
728             * <pre>
729             * &lt;og:input type="number" name="lot" step="0.5" /&gt;??単?.5
730             * </pre>
731             *
732             * @og.rev 5.7.1.0 (2013/12/06) 新規追?
733             *
734             * @param       step 入力?刻??プ?
735             * @see         <a href="http://www.htmq.com/html5/input_step.shtml">step</a>
736             */
737            public void setStep( final String step ) {
738                    set( "step",getRequestParameter( step ) );
739            }
740    
741            /**
742             * 【HTML5】?力??を指定する?
743             *
744             * @og.tag
745             * HTML5から追?れた新機?です?
746             * 入力?目が?力??であることをブラウザに知らせることができます?
747             * 単独で、required 属?を使用できるようにしておきます?
748             *
749             * フレー?ークの入力??は、must 属?ですが、must 属?を指定した?合にも?
750             * シス?リソースの USE_HTML5_HEADER ?true に設定して?場合??
751             * required 属?を?力します?
752             *
753             * 利用可能type:[text,search,url,tel,email,datetime,date,month,week,time,datetime-local,number,checkbox,radio,file]
754             *
755             * ※ required は、論理属?です?
756             *
757             * <pre>
758             * &lt;og:input type="text" name="yourname" required="required" /&gt;
759             * </pre>
760             *
761             * @og.rev 5.7.1.0 (2013/12/06) 新規追?
762             *
763             * @param       req 入力??を指?
764             * @see         <a href="http://www.htmq.com/html5/input_required.shtml">required</a>
765             */
766            public void setRequired( final String req ) {
767                    String required = nval( getRequestParameter( req ),null );
768                    if( required != null ) {
769                            if( required.equalsIgnoreCase( "required" ) ||
770                                    required.equalsIgnoreCase( "true"     ) ) {
771                                            set( "required","required" );
772                            }
773                            else if( ! required.equalsIgnoreCase( "false" ) ) {
774                                    String errMsg = "required には、[required/true/false]以外????できません?
775                                                                    + " required=[" + required + "]" + HybsSystem.CR ;
776                                    throw new HybsSystemException( errMsg );
777                            }
778                    }
779            }
780    
781            /**
782             * 【TAG】ロールをセ?します?
783             *
784             * @og.tag
785             * ここで?したカラ?ールを?に、ユーザー毎?アクセス許可がチェ?されます?
786             * アクセス許可されな?、表示されません?
787             * こ?ロールを指定しな??合?、カラ?ソースのロールが使用されます?
788             *
789             * @og.rev 4.0.0.0 (2005/11/30) 新規追?
790             *
791             * @param       roles ロール
792             */
793            public void setRoles( final String roles ) {
794                    set( "roles",getRequestParameter( roles ) );
795            }
796    
797            /**
798             * 【TAG】??入力を表す色に変えるかど?[true/false]を指定しま?初期値:false)?
799             *
800             * @og.tag
801             * 初期値は、??でな?"false") です?
802             * シス?リソースの USE_HTML5_HEADER が?true に?されて?場合??
803             * HTML5 適用として、required 属?も?出力します?
804             *
805             * &lt;og:input name="PN" must="true" /&gt;
806             *
807             * @og.rev 5.2.1.0 (2010/10/01) 新規追?
808             * @og.rev 5.7.1.0 (2013/12/06) HTML5 対?required属?)?
809             *
810             * @param       flag    ??入力色に変えるかど?[true:??入?それ以???でない]
811             */
812            public void setMust( final String flag ) {
813                    mustType = nval( getRequestParameter( flag ),null );
814                    if( "true".equalsIgnoreCase( mustType ) ) {
815                            mustType = "must";
816                            add( "class","must" );
817    
818                            // 5.7.1.0 (2013/12/06) HTML5 対?required属?)?
819                            if( isUseHTML5() ) {
820                                    set( "required","required" );
821                            }
822                    }
823            }
824    
825            /**
826             * 【TAG】選択??入?どれかひとつ??)を表す色[true/mustAny/そ?他]を指定しま?初期値:無???
827             *
828             * @og.tag
829             * ?のカラ???、どれかひとつを??とする選択??入力を示す色を指定します?
830             * true また?、mustAny を設定すると、class属?に、mustAny がセ?されます?
831             * mustAny は、CSSファイルに初期設定されて?す?true また?、mustAny 以外?値をセ?
832             * すると、その値がそのまま、class属?にセ?されます?で?択??のグループ化?
833             * 可能です?
834             * なお?実際の選択??入力チェ?は、ここではなく?columnCheck タグで?が?です?
835             * 自動???、mustAny="true" ??場合?み有効です?
836             * 初期値は、無?です?
837             *
838             * @og.rev 5.2.1.0 (2010/10/01) 新規追?
839             *
840             * @param       flag 選択??入の?[true/mustAny/そ?他]
841             */
842            public void setMustAny( final String flag ) {
843                    if( mustType == null ) {        // must 属?と同時設定時には、must 属?を優先します?
844                            mustType = nval( getRequestParameter( flag ),null );
845                            if( "true".equalsIgnoreCase( mustType ) ) {
846                                    mustType = "mustAny";
847                            }
848                            add( "class",mustType );        // mustType == null の場合?、add されません?
849                    }
850            }
851    
852            /**
853             * mustType 属?を取得します?
854             *
855             * must , mustAny 属?を設定する?合に、mustType 属?を設定します?
856             * そ?設定された値を取り?します?
857             * 何も設定されて??態では、null を返します?
858             *
859             * @og.rev 5.2.1.0 (2010/10/01) 新規追??
860             *
861             * @return      mustType属?
862             */
863            protected String getMustType() {
864                    return mustType ;
865            }
866    
867            /**
868             * must , mustAny 属?を?動化するためのhiddenタグを生成します?
869             *
870             * HybsSystem.MUST_KEY + mustType をキーに、指定?カラ?を?として
871             * hidden を作?します?こ?値?columnChack タグで拾って must 処?ます?
872             * なお?must , mustAny 属?を使用して???合?、null を返します?
873             *
874             * @og.rev 5.2.1.0 (2010/10/01) 新規追??
875             *
876             * @param       name    must?するカラ??名称
877             *
878             * @return      自動化するためのhiddenタグ
879             */
880            protected String makeMustHidden( final String name ) {
881                    String rtn = null;
882                    if( mustType != null ) {
883                            rtn = XHTMLTag.hidden( HybsSystem.MUST_KEY + mustType, name );
884                    }
885                    return rtn;
886            }
887    
888            /**
889             * HTML5を使用するかど?(true:使用する/false:使用しな?を取得します?
890             *
891             * HTML5 の機?を有効にするには、ネイ?ブモードで動作させる?があります?
892             *   ?USE_IE7_HEADER = "false" に設定する?
893             *   ② USE_HTML5_HEADER = "true" に設定する?
894             *   ③ IEの??ル⇒互換表示設定で、互換表示に追?たWebサイトから削除する?
895             *   ④ 同上?設定で、イントラサイトを互換表示で表示するのチェ?を外す?
896             * ?があります?
897             * こ?メソ?で返すのは、①と②の設定ができて?ば true、そ?なければ、false を返します?
898             * 
899             *      (初期値:USE_IE7_HEADER[={@og.value org.opengion.hayabusa.common.SystemData#USE_IE7_HEADER}])?
900             *      (初期値:USE_HTML5_HEADER[={@og.value org.opengion.hayabusa.common.SystemData#USE_HTML5_HEADER}])?
901             *
902             * @og.rev 5.7.1.0 (2013/12/06) 新規追?
903             *
904             * @return      HTML5を使用するかど?(true:使用する/false:使用しな?
905             */
906            protected boolean isUseHTML5() {
907                    boolean useHTML5 = ! HybsSystem.sysBool( "USE_IE7_HEADER" )                     // ?IE7互換モードが、false
908                                                            &&      HybsSystem.sysBool( "USE_HTML5_HEADER" );       // ② HTML5 ヘッ???true
909    
910                    return useHTML5 ;
911            }
912    }