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