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    import org.opengion.fukurou.util.XHTMLTag;
021    
022    import static org.opengion.fukurou.util.StringUtil.nval ;
023    
024    /**
025     * 入力フィールドやボタンなどを作æ?するHTML拡張タグですã?
026     *
027     * 簡易的な入力用タグとして、columnタグがありますã?でã€??常は、columnタグをお使ã�?¸‹さã�??
028     * name 属æ?に ラベルリソース のキーを与えることで、ロケールにあわせたリソースã‚?
029     * 使用して、画面に表示しますã?
030     * ロケールは、session 登録é ?›®の HybsSystem#LANG_KEY をå?期å?で使用しã?
031     * language 属æ?で定義されてã�?‚‹場合ã?、そちらを優先しますã?
032     *
033     * @og.formSample
034     * ●形式ï¼?lt;og:input name=… value=… />
035     * ●body?šあã‚?EVAL_BODY_BUFFERED:BODYを評価しã?{@XXXX} を解析しまã�?
036     *
037     * ●Tag定義??
038     *   <og:input
039     *       type               【HTML】表示形式[text/password/checkbox/radio/submit/reset/button/image/file]を指定しまã�?初期値:text)
040     *                                  HTML5追åŠ??[search/tel/url/email/datetime/date/month/week/time/datetime-local/number/range/color]
041     *       name               【HTML】名前をæŒ?®šしまã�?
042     *       value              【HTML】このフィールドに設定するå?を指定しまã�?
043     *       caseKey            【TAG】このタグ自体を利用するかどã�?�‹の条件キーを指定しまã�?初期値:null)
044     *       caseVal            【TAG】このタグ自体を利用するかどã�?�‹の条件値を指定しまã�?初期値:null)
045     *       caseNN             【TAG】指定ã?値がã?null/ゼロæ–?­—å? でなã�??å�?Not Null=NN)は、このタグは使用されまã�?初期値:true)
046     *       caseNull           【TAG】指定ã?値がã?null/ゼロæ–?­—å? の場合ã?、このタグは使用されまã�?初期値:true)
047     *       lbl                【TAG】ラベルリソースのラベルIDを指定しまã�?
048     *       lbls               【TAG】ラベルをCSV形式でè¤?•°æŒ?®šしまã�?
049     *       td                 【TAG】テーブル形式ã? <td> タグを使用するかどã�?�‹[yes/no/false]を指定しまã�?初期値:yes)
050     *       colspan            【TAG】フィールド部åˆ?? colspan を指定しまã�?
051     *       nextForm           【TAG】å?力カーソルを指定されたname属æ?のフィールドへ自動的に移動しまã�?
052     *       optionAttributes   【TAG】JavaScript などの HTML基本タグ以外ã?属æ?をã?そã?ままタグとして使用しまã�?
053     *       must               【TAG】å¿??入力を表す色に変えるかどã�?�‹[true/false]を指定しまã�?初期値:false)
054     *       mustAny            【TAG】選択å¿??入åŠ?どれかひとつå¿??)を表す色[true/mustAny/そã?他]を指定しまã�?初期値:無æŒ?®?
055     *       aimai              【TAG】曖昧検索可能フィールドとして、曖昧検索方法をæŒ?®šしまã�?初期値:null)
056     *       size               【HTML】横å¹?‚’æŒ?®šしまã�?typeがtextまたã?passwordの場合ã?æ–?­—数で、それ以外ã?ピクセル)
057     *       maxlength          【HTML】最大入力文字数を指定しまã�?typeがtextまたã?passwordの場å�?
058     *       checked            【HTML】type ã�?checkbox ã�?radio のときã?初めから選択された状態で表示しまã�?"checked"のみæŒ?®š可)
059     *       src                【HTML】type ã�?image の場合ã?送信ボタンとして利用する画像ã?URLをセãƒ?ƒˆしまã�?
060     *       alt                【HTML】type ã�?image の場合で、画像が表示できなã�??合ã?代替ãƒ?‚­ストをセãƒ?ƒˆしまã�?
061     *       accept             【HTML】type ã�?file の場合に、MIMEタイプをCSV形式でè¤?•°æŒ?®šå?来まã�?
062     *       usemap             【HTML】type ã�?image の場合ã?クライアントサイドã?イメージマップã?URLを指定しまã�?
063     *       ismap              【HTML】type ã�?image の場合に、サーバã?サイドã?イメージマップを使用する場合にæŒ?®šしまã�?
064     *       id                 【HTML】要ç´?�«対して固有ã?名前(id)をつける場合に設定しまã�?
065     *       lang               【HTML】要ç´??å†?®¹と他ã?属æ?値のè¨?ª?lang,xml:lang)を指定しまã�?
066     *       dir                【HTML】文字表記ã?方å�?dir)を指定しまã�?
067     *       title              【HTML】要ç´?�«対する補足çš?ƒ…報(title)を設定しまã�?
068     *       style              【HTML】この要ç´?�«対して適用させるスタイルシーãƒ?style)を設定しまã�?
069     *       readonly           【TAG】その部品に対して変更がå?来なã�?‚ˆã�?�«(readonly)æŒ?®šしまã�?サーバã?に送信されã‚?
070     *       disabled           【TAG】その部品に対してã€?�¸択や変更がå?来なã�?‚ˆã�?�«(disabled)æŒ?®šしまã�?サーバã?に送信されなã�?
071     *       tabindex           【HTML】タブã?移動é?(tabindex)を指定しまã�?0 ??32767)
072     *       accesskey          【HTML】アクセスキー(alt+キーで直接æŒ?®?を割り当てまã�?
073     *       clazz              【HTML】要ç´?�«対して class 属æ?を設定しまã�?
074     *       language           【TAG】タグå†?ƒ¨で使用するè¨?ªžコード[ja/en/zh/…]を指定しまã�?
075     *       onClick            【HTML】JavaScriptのイベンãƒ?onClick を設定しまã�?ä¾?onClick="renew('query.jsp','QUERY');")
076     *       onChange           【HTML】JavaScriptのイベンãƒ?onChange を設定しまã�?ä¾?onChange="renew('query.jsp','QUERY');")
077     *       onBlur             【HTML】JavaScriptのイベンãƒ?onBlur を設定しまã�?ä¾?onBlur="this.value=value.toUpperCase();")
078     *       onFocus            【HTML】JavaScriptのイベンãƒ?onFocus を設定しまã�?
079     *       ondblClick         【HTML】JavaScriptのイベンãƒ?ondblClick を設定しまã�?
080     *       onMouseDown        【HTML】JavaScriptのイベンãƒ?onMouseDown を設定しまã�?
081     *       onMouseUp          【HTML】JavaScriptのイベンãƒ?onMouseUp を設定しまã�?
082     *       onMouseMove        【HTML】JavaScriptのイベンãƒ?onMouseMove を設定しまã�?
083     *       onMouseOut         【HTML】JavaScriptのイベンãƒ?onMouseOut を設定しまã�?
084     *       onMouseOver        【HTML】JavaScriptのイベンãƒ?onMouseOver を設定しまã�?
085     *       onSelect           【HTML】JavaScriptのイベンãƒ?onSelect を設定しまã�?
086     *       onKeydown          【HTML】JavaScriptのイベンãƒ?onKeydown を設定しまã�?
087     *       onKeypress         【HTML】JavaScriptのイベンãƒ?onKeypress を設定しまã�?
088     *       onKeyup            【HTML】JavaScriptのイベンãƒ?onKeyup を設定しまã�?
089     *       autocomplete       【HTML5】å?力å?補を提示して入力å?容をè?動補完する[on/off]?ˆå?期å?はon?‰ã?
090     *       autofocus          【HTML5】指定したå?力æ¬?�«カーソルが当たって自動的にフォーカスされますã?
091     *       pattern            【HTML5】正規表現で入力å?のパターンを指定しますã?
092     *       placeholder        【HTML5】å?力æ¬?�«初期表示するå†?®¹を指定しますã?
093     *       required           【HTML5】å?力å¿??を指定しまã�?
094     *       list               【HTML5】ユーザーに入力å?補として提案するデータリストã?要ç´??id属æ?の値を指定しますã?
095     *       min                【HTML5】å?力æ¬?�§入力できるæœ?°�å?を指定しますã?
096     *       max                【HTML5】å?力æ¬?�§入力できるæœ?¤§値を指定しますã?
097     *       step               【HTML5】å?力æ¬?�§刻ã‚?‚¹ãƒ?ƒƒプå?を指定するã?
098     *       roles              【TAG】ロールをセãƒ?ƒˆしまã�?
099     *       debug              【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
100     *   >   ... Body ...
101     *   </og:input>
102     *
103     * ●使用ä¾?
104     *    <og:input name="OYA" />                             lbl属æ?が指定されてã�?�ªã�??合ã?、name属æ?をキーにしてLabelResourceを読み取りますã?
105     *    <og:input name="PN" lbl="KO" />                     lbl属æ?を指定することで、ラベルã�?�‘を付替えることができますã?
106     *    <og:input name="PN" size="13" maxlength="11" />     強制çš?�«サイズの変更をするときã?、size属æ?、maxlength属æ?を使用できますã?
107     *    <og:input name="OYA" td="false" />                  自動作æ?されるtdタグã‚?ƒ©ベルを外すときã?td属æ?を使ã�?�¾すã?
108     *    <og:input name="OYA" td="no" />                     自動作æ?されるtdタグを外し、ラベルとフィールドã?残しますã?
109     *    <og:input name="PN" optionAttributes="onBlur='blr()'
110     *                            onFocus='fcs()'" />
111     *                                                               JavaScriptのイベントをコーãƒ?‚£ングするときã?、optionAttributes属æ?を使ã�?�¾すã?
112     *    <og:input type="radio" name="OYA" />                ラベル部åˆ?�¨入力フィールド部åˆ?�Œãƒ??ブルタグの<td>により左右にåˆ?‰²されますã?
113     *
114     *    <table>
115     *        <tr><og:input name="PN" value="{@PN}" /></tr>
116     *        <tr><og:input name="CD" value="{@CD}" /></tr>
117     *    </table>
118     *
119     *    <table>
120     *        <tr><og:input name="PN" value="{@PN}" >部品å?力フィールãƒ?lt;/og:input></tr>
121     *        <tr><og:input name="CD" value="{@CD}" >コードフィールãƒ?lt;/og:input></tr>
122     *    </table>
123     *                                                               HTML 表示時ã?、前後に<tr>タグで囲って,整形できますã?
124     *
125     *    <og:input name="A"  nextForm="B" />                æœ?¤§桁数入力後ã?フォーãƒ?B にフォーカスが移動しますã?
126     *    <og:input name="B" />
127     *
128     *    BODY 部åˆ?�«記述した値は、å?力フィールドã?直後にセãƒ?ƒˆされますã?
129     *    <og:input name="PN" >
130     *      <button type="button" onclick="popup(?¥?¥?¥);return false;">
131     *          <og:message lbl="POPUP" comment="▼" />
132     *      </button>
133     *    </og:input>
134     *
135     * @og.group 画面部å“?
136     *
137     * @version  4.0
138     * @author   Kazuhiko Hasegawa
139     * @since    JDK5.0,
140     */
141    public class InputTag extends HTMLTagSupport {
142            //* こã?プログラãƒ??VERSIONæ–?­—å?を設定しますã?       {@value} */
143            private static final String VERSION = "5.7.1.0 (2013/12/06)" ;
144    
145            private static final long serialVersionUID = 571020131206L ;
146    
147            // 5.7.1.0 (2013/12/06) HTML5 で新たに追åŠ?�•れた、type を追åŠ?
148    //      private static final String CHECK_TYPE = "|text|password|checkbox|radio|submit|reset|button|image|file|hidden|" ;
149            private static final String CHECK_TYPE = "|text|password|checkbox|radio|submit|reset|button|image|file|hidden|" 
150                                                                            + "search|tel|url|email|datetime|date|month|week|time|datetime-local|number|range|color|" ;
151    
152            // 4.0.0 (2005/01/31) HTML_LABEL_SEPARATOR ã‚?boolean 変数として取得しますã?
153            private final String CLM = ( HybsSystem.sysBool( "HTML_LABEL_SEPARATOR" ) ) ? ":" : "" ;
154    
155            private String  td_flag         = "yes";        // yes:<td> タグを使用 / false:フィールドã?み / no:ラベルとフィールãƒ?
156            // 3.0.1.4 (2003/03/17) colspan 属æ?を追åŠ??
157            private String  colspan     = "";
158            // 3.5.4.2 (2003/12/15) nextForm 属æ?を追åŠ??
159            private String  nextForm    = null;
160    
161            // 4.0.0 (2005/01/31) COLUMNS_MAXSIZE を定義しておきますã?
162            private final int COLUMNS_MAXSIZE = HybsSystem.sysInt( "HTML_COLUMNS_MAXSIZE" ) ;   // 表示フィールドã?大きさ
163    
164            // 4.0.0 (2007/05/30) BODY 部åˆ?�«記述した値は、å?力フィールドã?直後にセãƒ?ƒˆされますã?
165            private String  body            = null;
166    
167            /**
168             * Taglibの開始タグが見つかったときに処ç�?�™ã‚?doStartTag() ã‚?オーバã?ライドしますã?
169             *
170             * @og.rev 4.0.0.0 (2007/05/30) 新規追åŠ?BODY部の評価)
171             * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
172             *
173             * @return      後続å?ç�??æŒ?¤º( EVAL_BODY_BUFFERED )
174             */
175            @Override
176            public int doStartTag() {
177                    // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
178                    if( useTag() ) {
179                            return( EVAL_BODY_BUFFERED );   // Body を評価するã€? extends BodyTagSupport æ™?
180                    }
181                    return ( SKIP_BODY );                           // Body を評価しなã�?
182            }
183    
184            /**
185             * Taglibのタグ本体を処ç�?�™ã‚?doAfterBody() ã‚?オーバã?ライドしますã?
186             *
187             * @og.rev 4.0.0.0 (2007/05/30) 新規追åŠ?BODY部の評価)
188             *
189             * @return      後続å?ç�??æŒ?¤º(SKIP_BODY)
190             */
191            @Override
192            public int doAfterBody() {
193                    body = getBodyString();
194                    return(SKIP_BODY);
195            }
196    
197            /**
198             * タグリブオブジェクトをリリースしますã?
199             * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
200             *
201             * @og.rev 2.0.0.4 (2002/09/27) カスタãƒ?‚¿グの release() メソãƒ?ƒ‰をã?追åŠ?
202             * @og.rev 2.0.0.8 (2002/10/09) yes/no/false でæŒ?®šするよã�?�«変更
203             * @og.rev 3.0.1.4 (2003/03/17) colspan 属æ?を追åŠ??
204             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
205             * @og.rev 3.5.4.2 (2003/12/15) nextForm 属æ?を追åŠ??
206             * @og.rev 5.8.7.1 (2015/05/22) body追åŠ?6.2.4.0対å¿?
207             */
208            @Override
209            protected void release2() {
210                    super.release2();
211                    td_flag         = "yes";        // table形式ã? <td> タグを使用するかどã�?�‹
212                    colspan         = "";
213                    nextForm        = null;         // 3.5.4.2 (2003/12/15)
214                    body            = null;         // 5.8.7.1 (2015/05/22)
215            }
216    
217            /**
218             * 検索条件の入力用のãƒ?‚­ストフィールドを作æ?しますã?
219             *
220             * ãƒ??ブルタグによりフィールドã?åˆ?‰²されますã?
221             * 使用時ã?、テーブルタグを前後に使用して下さã�??
222             *
223             * @og.rev 2.0.0.8 (2002/10/09) yes/no/false でæŒ?®šするよã�?�«変更
224             * @og.rev 2.0.1.0 (2002/10/10) ラベルとフィールドã?セパレーターとして、コロン(??を使用するかどã�?�‹を指定できる
225             * @og.rev 3.0.1.2 (2003/03/07) forward.jsp の代替用 CommonForwardTag を新規作æ?
226             * @og.rev 3.1.0.1 (2003/03/26) キャãƒ?‚·ュエントリーは、type="submit" の場合ã?み、登録するã€?
227             * @og.rev 3.1.1.0 (2003/03/28) forward.jsp 関係ã?処ç�?‚’削除するã€?
228             * @og.rev 3.1.1.0 (2003/03/28) radio ボタン等で、ラベルをクリãƒ?‚¯してもå?をセãƒ?ƒˆできるようにするã€?
229             * @og.rev 3.5.4.2 (2003/12/15) 入力カーソルをè?動的に次のフィールドへ移動する機è?を追åŠ?�™るã?
230             * @og.rev 4.0.0.0 (2007/05/30) BODY 部åˆ?�«記述した値は、å?力フィールドã?直後にセãƒ?ƒˆされますã?
231             * @og.rev 4.3.7.1 (2009/06/08) id=labelのclassåŒ?
232             * @og.rev 5.2.1.0 (2010/10/01) must , mustAny 属æ?をè?動化しますã?
233             * @og.rev 5.6.2.2 (2013/03/15) 自動must処ç�??出力位置を変更
234             * @og.rev 5.8.4.1 (2015/02/10) aimai対å¿?6.2.0.0é€?§»æ¤?
235             *
236             * @return  入力用のãƒ?‚­ストフィールドタグ
237             */
238            @Override
239            protected String makeTag() {
240                    if( get( "value" ) == null ) { set( "value","" ); }
241                    if( getMsglbl() == null ) { setLbl( get( "name" ) ); }
242    
243                    // 3.5.4.2 (2003/12/15) 入力カーソルをè?動的に次のフィールドへ移動する機è?
244                    if( nextForm != null ) {
245                            String onKeyup = "nextForm(this,'" + nextForm + "'," + get( "maxlength" ) + ");" ;
246                            set( "onKeyup",onKeyup );
247                    }
248    
249                    String type = get( "type" );
250                    StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
251                    // もう少しましな、別の方法をè€?�ˆるå¿?¦�がありますã?
252                    if( "yes".equals( td_flag ) ) {
253                            if( type != null && ( "radio".equals( type ) || "checkbox".equals( type ) )) {
254                                    if( get( "id" ) == null ) { set( "id",TaglibUtil.getTagId() ); }
255    
256                                    rtn.append( "<td>" );
257                                    rtn.append( XHTMLTag.input( getAttributes() ) );
258                                    if( body != null ) { rtn.append( body ); }      // 4.0.0 (2007/05/30) BODY部の評価
259                                    rtn.append( "</td>" );
260                                    rtn.append( "<td " );
261                                    rtn.append( colspan );
262                                    rtn.append( ">" );
263                                    rtn.append( "<label for=\"" );
264                                    rtn.append( get( "id" ) );
265                                    rtn.append( "\">" );
266                                    rtn.append( getLongLabel() );           // 4.0.0 (2005/01/31)
267                                    rtn.append( "</label>" );
268    //                              rtn.append( "</td>" );
269                            }
270                            else if( type != null && ( "submit".equals( type ) || "reset".equals( type ) || "button".equals( type ) ) ) {
271                                    set( "value",getMsglbl() );
272                                    rtn.append( "<td" );
273                                    rtn.append( colspan );
274                                    rtn.append( ">" );
275                                    rtn.append( XHTMLTag.input( getAttributes() ) );
276                                    if( body != null ) { rtn.append( body ); }      // 4.0.0 (2007/05/30) BODY部の評価
277                                    rtn.append( "</td>" );
278    //                              rtn.append( "<td></td>" );
279                                    rtn.append( "<td>" );
280                            }
281                            else {
282                                    // 4.3.7.1 (2009/06/08) id=labelのclassåŒ?
283                                    // rtn.append( "<td id=\"label\">" );
284                                    rtn.append( "<td class=\"label\">" );
285                                    rtn.append( getLongLabel() );           // 4.0.0 (2005/01/31)
286                                    rtn.append( CLM );
287                                    rtn.append( "</td>" );
288                                    rtn.append( "<td" );
289                                    rtn.append( colspan );
290                                    rtn.append( ">" );
291                                    rtn.append( XHTMLTag.input( getAttributes() ) );
292                                    if( body != null ) { rtn.append( body ); }      // 4.0.0 (2007/05/30) BODY部の評価
293    //                              rtn.append( "</td>" );
294                            }
295                            rtn.append( makeAimaiPicker( get("name") ) ); // 5.8.4.2(2015/02/20)
296                            if( getMustType() != null ) { rtn.append( makeMustHidden( get( "name" ) ) ); } // 5.6.2.2 (2013/03/15)
297                            rtn.append( "</td>" );
298                    }
299                    else if( "no".equals( td_flag ) ) {
300                            if( type != null && ( "radio".equals( type ) || "checkbox".equals( type ) )) {
301                                    rtn.append( "<label>" );
302                                    rtn.append( XHTMLTag.input( getAttributes() ) );
303                                    if( body != null ) { rtn.append( body ); }      // 4.0.0 (2007/05/30) BODY部の評価
304                                    // 4.3.7.1 (2009/06/08) id=labelのclassåŒ?
305                                    // rtn.append( "<span id=\"label\">" );
306                                    rtn.append( "<span class=\"label\">" );
307                                    rtn.append( getLongLabel() );           // 4.0.0 (2005/01/31)
308                                    rtn.append( "</span>" );
309                                    rtn.append( "</label>" );
310                            }
311                            else if( type != null && ( "submit".equals( type ) || "reset".equals( type ) || "button".equals( type ) ) ) {
312                                    set( "value",getMsglbl() );
313                                    rtn.append( XHTMLTag.input( getAttributes() ) );
314                                    if( body != null ) { rtn.append( body ); }      // 4.0.0 (2007/05/30) BODY部の評価
315                            }
316                            else {
317                                    // 4.3.7.1 (2009/06/08) id=labelのclassåŒ?
318                                    // rtn.append( "<span id=\"label\">" );
319                                    rtn.append( "<span class=\"label\">" );
320                                    rtn.append( getLongLabel() );           // 4.0.0 (2005/01/31)
321                                    rtn.append( CLM );
322                                    rtn.append( "</span>" );
323                                    rtn.append( XHTMLTag.input( getAttributes() ) );
324                                    if( body != null ) { rtn.append( body ); }      // 4.0.0 (2007/05/30) BODY部の評価
325                            }
326                            rtn.append( makeAimaiPicker( get("name") ) ); // 5.8.4.2(2015/02/20)
327                            if( getMustType() != null ) { rtn.append( makeMustHidden( get( "name" ) ) ); } // 5.6.2.2 (2013/03/15)
328                    }
329                    else {
330                            if( type != null && ( "submit".equals( type ) || "reset".equals( type ) || "button".equals( type ) ) ) {
331                                    set( "value",getMsglbl() );
332                                    rtn.append( XHTMLTag.input( getAttributes() ) );
333                                    if( body != null ) { rtn.append( body ); }      // 4.0.0 (2007/05/30) BODY部の評価
334                            }
335                            else {
336                                    rtn.append( XHTMLTag.input( getAttributes() ) );
337                                    if( body != null ) { rtn.append( body ); }      // 4.0.0 (2007/05/30) BODY部の評価
338                            }
339                            rtn.append( makeAimaiPicker( get("name") ) ); // 5.8.4.2(2015/02/20)
340                            if( getMustType() != null ) { rtn.append( makeMustHidden( get( "name" ) ) ); } // 5.6.2.2 (2013/03/15)
341                    }
342    
343                    // 5.2.1.0 (2010/10/01) must , mustAny 属æ?をè?動化しますã?
344                    // 5.6.2.2 (2013/03/15) tdの外に出力される不正形を正しまã�?
345    //              if( getMustType() != null ) { rtn.append( makeMustHidden( get( "name" ) ) ); }
346    
347                    return rtn.toString() ;
348            }
349    
350            /**
351             * 【HTML】名前をæŒ?®šしますã?
352             *
353             * @og.tag
354             *  &lt;og:input name="PN" /&gt;
355             *
356             * @param   name 名前
357             */
358            public void setName( final String name ) {
359                    set( "name",getRequestParameter( name ) );
360            }
361    
362            /**
363             * 【HTML】表示形式をæŒ?®šしまã�?初期値:text)ã€?
364             *
365             * @og.tag
366             * 通常は、表示形式[text/password/checkbox/radio/submit/reset/button/image/file]を指定しますã?
367             * HTML5 で追åŠ?�•れた形式[search/tel/url/email/datetime/date/month/week/time/datetime-local/number/range/color]
368             * もã?設定できますã?
369             *
370             * HTML5 の機è?を有効にするには、ネイãƒ?‚£ブモードで動作させるå¿?¦�がありますã?
371             *   â‘?USE_IE7_HEADER = "false" に設定するã?
372             *   ② USE_HTML5_HEADER = "true" に設定するã?
373             *   ③ IEのãƒ??ル⇒互換表示設定で、互換表示に追åŠ?�—たWebサイトから削除するã€?
374             *   ④ 同上ã?設定で、イントラサイトを互換表示で表示するのチェãƒ?‚¯を外すã€?
375             * å¿?¦�がありますã?
376             *
377             * &lt;og:input type="text"     /&gt; ãƒ?‚­ストã?ãƒ?‚¯スを表示
378             * &lt;og:input type="password" /&gt; パスワード専用ãƒ?‚­ストã?ãƒ?‚¯スを表示
379             * &lt;og:input type="checkbox" /&gt; チェãƒ?‚¯ボックスを表示
380             * &lt;og:input type="radio"    /&gt; ラジオボタンを表示
381             * &lt;og:input type="submit"   /&gt; 送信実行ã?タンを表示
382             * &lt;og:input type="reset"    /&gt; 入力したフィールドå?容をå?てリセãƒ?ƒˆ
383             * &lt;og:input type="button"   /&gt; ボタンを表示
384             * &lt;og:input type="image"    /&gt; イメージを表示してクリãƒ?‚¯した座標を返す
385             * &lt;og:input type="file"     /&gt; ファイル名å?力ã?ãƒ?‚¯スを表示
386             * &lt;og:input type="hidden"   /&gt; 表示させずにサーバã?に送信するãƒ??タ
387             *
388             * HTML5 で追åŠ?�•れたタイãƒ?
389             * &lt;og:input type="search"                       /&gt; 検索ãƒ?‚­ストã?入力æ¬?‚’作æ?する
390             * &lt;og:input type="tel"                          /&gt; 電話番号の入力æ¬?‚’作æ?する
391             * &lt;og:input type="url"                          /&gt; URLの入力æ¬?‚’作æ?する
392             * &lt;og:input type="email"                        /&gt; メールアドレスの入力æ¬?‚’作æ?する
393             * &lt;og:input type="datetime"                     /&gt; UTC?ˆ協定世界時)による日時ã?入力æ¬?‚’作æ?する
394             * &lt;og:input type="date"                         /&gt; 日付ã?入力æ¬?‚’作æ?する
395             * &lt;og:input type="month"                        /&gt; 月ã?入力æ¬?‚’作æ?する
396             * &lt;og:input type="week"                         /&gt; 週の入力æ¬?‚’作æ?する
397             * &lt;og:input type="time"                         /&gt; 時間の入力æ¬?‚’作æ?する
398             * &lt;og:input type="datetime-local"       /&gt; UTC?ˆ協定世界時)によらなã�?ƒ­ーカル日時ã?入力æ¬?‚’作æ?する
399             * &lt;og:input type="number"                       /&gt; 数値の入力æ¬?‚’作æ?する
400             * &lt;og:input type="range"                        /&gt; レンジの入力æ¬?‚’作æ?する
401             * &lt;og:input type="color"                        /&gt; 色の入力æ¬?‚’作æ?する
402             *
403             * @og.rev 5.7.1.0 (2013/12/06) HTML5 対å¿?
404             *
405             * @param   type 表示形式[text/password/checkbox/radio/submit/reset/button/image/file]、HTML5用 [search/tel/url/email/datetime/date/month/week/time/datetime-local/number/range/color]
406             */
407            public void setType( final String type ) {
408                    String tp = getRequestParameter( type );
409    
410                    if( check( "|" + tp + "|" , CHECK_TYPE ) ) {
411                            set( "type",tp );
412                    }
413                    else {
414                            String errMsg = "type 属æ?は、下記ã?中から選択してください。type=["
415                                                     + tp + "  in [" + CHECK_TYPE + "]";
416                            throw new HybsSystemException( errMsg );
417                    }
418            }
419    
420            /**
421             * 【HTML】このフィールドに設定するå?を指定しますã?
422             *
423             * @og.tag
424             * type属æ?の値ã�?radio"ã�?checkbox"以外ã?場合ã?こã?属æ?は省略可能ですã?
425             *&lt;og:input name="PN" value="syokichi" /&gt;
426             *
427             * @param   value 初期値
428             */
429            public void setValue( final String value ) {
430                    set( "value",getRequestParameter( value ) );
431            }
432    
433            /**
434             * 【HTML】横å¹?‚’æŒ?®šしまã�?typeがtextまたã?passwordの場合ã?æ–?­—数で、それ以外ã?ピクセル)ã€?
435             *
436             * @og.tag
437             *  &lt;og:input name="PN" size="20" /&gt;
438             *
439             * @param   size 横å¹?
440             */
441            public void setSize( final String size ) {
442                    set( "size",getRequestParameter( size ) );
443            }
444    
445            /**
446             * 【HTML】最大入力文字数を指定しまã�?typeがtextまたã?passwordの場å�?ã€?
447             *
448             * @og.tag
449             * æœ?¤§æ–?­—数はsizeæŒ?®šをè¶?�ˆ得るがã?è¶?�ˆたå?合ユーザエージェントã?スクロール機構を提供するå¿?¦�がありますã?
450             *こã?属æ?の初期値は「無制限ã?ですã?
451             *&lt;og:input name="PN" maxlength="20" /&gt;
452             *
453             * @og.rev 3.5.4.2 (2003/12/15) æœ?¤§入力制限数に応じたサイズ自動生成を入れますã?
454             * @og.rev 3.5.4.5 (2004/01/23) CSSで処ç�?�™るå?合ã?クラス属æ?は、maxlength ã�???以下ã?場合とするã€?
455             * @og.rev 4.0.0.0 (2005/01/31) getFieldSize メソãƒ?ƒ‰ã‚?XHTMLTag から DBColumn へ移å‹?
456             *
457             * @param   maxlength æœ?¤§入力文字数
458             */
459            public void setMaxlength( final String maxlength ) {
460                    String mlen = nval( getRequestParameter( maxlength ),null ) ;
461                    set( "maxlength",mlen );
462                    if( get( "size" ) == null && mlen != null ) {
463                            // 4.0.0 (2005/01/31) getFieldSize メソãƒ?ƒ‰ã‚?XHTMLTag から DBColumn へ移å‹?
464                            int size = Integer.parseInt( mlen );
465                            if( size > COLUMNS_MAXSIZE ) { size = COLUMNS_MAXSIZE; }
466                            set( "size",String.valueOf( size ) );
467                    }
468    
469                    // 3.5.4.5 (2004/01/23) 追åŠ?
470                    if( mlen != null && mlen.length() == 1 ) {
471                            char ch = mlen.charAt(0);
472                            if( ch >= '1' && ch <= '5' ) {
473                                    add( "class", "S0" + ch );      // 3.5.5.9 (2004/06/07) セパレータ引数付きのメソãƒ?ƒ‰に変更
474                            }
475                    }
476            }
477    
478            /**
479             * 【HTML】type ã�?checkbox ã�?radio のときã?初めから選択された状態で表示しまã�?"checked"のみæŒ?®š可)ã€?
480             *
481             * @og.tag
482             *
483             * &lt;og:input name="PN" type="checkbox" checked="checked" /&gt;
484             *
485             * @param   ch 選択された状態にするかどã�?�‹[checked:選択状æ…?そã?ã�?なにもしない]
486             */
487            public void setChecked( final String ch ) {
488                    String checked = getRequestParameter( ch );
489                    if( "checked".equals( checked )) {
490                            set( "checked","checked" );
491                    }
492            }
493    
494            /**
495             * 【HTML】type ã�?image の場合ã?送信ボタンとして利用する画像ã?URLをセãƒ?ƒˆしますã?
496             *
497             * @og.tag src セãƒ?ƒˆ
498             *
499             * @param   src 画像ã?URL
500             */
501            public void setSrc( final String src ) {
502                    set( "src",getRequestParameter( src ) );
503            }
504    
505            /**
506             * 【HTML】type ã�?image の場合で、画像が表示できなã�??合ã?代替ãƒ?‚­ストをセãƒ?ƒˆしますã?
507             *
508             * @og.tag alt セãƒ?ƒˆ
509             *
510             * @param   alt 代替ãƒ?‚­スãƒ?
511             */
512            public void setAlt( final String alt ) {
513                    set( "alt",getRequestParameter( alt ) );
514            }
515    
516            /**
517             * 【HTML】type ã�?file の場合に、MIMEタイプをCSV形式でè¤?•°æŒ?®šå?来ますã?
518             *
519             * @og.tag accept セãƒ?ƒˆ
520             *
521             * @param   accept MIMEタイãƒ?CSV形å¼?
522             */
523            public void setAccept( final String accept ) {
524                    set( "accept",getRequestParameter( accept ) );
525            }
526    
527            /**
528             * 【HTML】type ã�?image の場合ã?クライアントサイドã?イメージマップã?URLを指定しますã?
529             *
530             * @og.tag usemap セãƒ?ƒˆ
531             *
532             * @param   usemap クライアントサイドã?イメージマップã?URL
533             */
534            public void setUsemap( final String usemap ) {
535                    set( "usemap",getRequestParameter( usemap ) );
536            }
537    
538            /**
539             * 【HTML】type ã�?image の場合に、サーバã?サイドã?イメージマップを使用する場合にæŒ?®šしますã?
540             *
541             * @og.tag ismap セãƒ?ƒˆ
542             *
543             * @param   ismap サーバã?サイドã?イメージマップを使用する場合にæŒ?®?
544             */
545            public void setIsmap( final String ismap ) {
546                    set( "ismap",getRequestParameter( ismap ) );
547            }
548    
549            /**
550             * 【TAG】テーブル形式ã? &lt;td&gt; タグを使用するかどã�?�‹[yes/no/false]を指定しまã�?初期値:yes)ã€?
551             *
552             * @og.tag
553             * 通常(初期値:yes)は、テーブル形式ã?&lt;td&gt; タグを使用して、ラベルとフィールドを整列させますã?
554             * no の場合ã?、tdタグを使用せず、ラベルとフィールドを連続して出力しますã?
555             * false は、ラベルをå?力せずã?フィールドã?み出力しますã?
556             *  &lt;og:input name="PN" td="false" /&gt;
557             *
558             * @og.rev 2.0.0.8 (2002/10/09) yes/no/false でæŒ?®šするよã�?�«変更
559             *
560             * @param   flag [yes:tdタグを使用/no:ラベルとフィールãƒ?false:フィールドã?み]
561             */
562            public void setTd( final String flag ) {
563                    String td = nval( getRequestParameter( flag ),td_flag );
564    
565                    if( check( "|" + td + "|" , "|yes|no|false|" ) ) {
566                            td_flag = td;
567                    }
568                    else {
569                            String errMsg = "td 属æ?は、下記ã?中から選択してください。td=["
570                                                     + td  + "  in [|true|false|label|]";
571                            throw new HybsSystemException( errMsg );
572                    }
573            }
574    
575            /**
576             * 【TAG】ラベルをCSV形式でè¤?•°æŒ?®šしますã?
577             *
578             * @og.tag
579             * シングルラベルの lbl 属æ?との違いは,ここではラベルをè¤?•° カンマ区åˆ?‚Šで
580             * 渡すことが可能であることですã?これによりã€?A,B,C" とã�?�†値に対してã€?
581             * "Aのラベル表示,Bのラベル表示,Cのラベル表示" とã�?�†具合にæ–?­—å?ã‚?
582             * 再合成しますã?
583             * これは、SQLæ–??Order By 句で、ソートé?を指定するå?合などに便利ですã?
584             *
585             *  &lt;og:orderBy columns="MKNMJP,MKCD,MKNMEN" lbls="MKNMJP,MKCD,MKNMEN" /&gt;
586             *
587             * @og.rev 3.5.6.2 (2004/07/05) 先に配å?にåˆ?§£してからリクエスト変数の値を取å¾?
588             * @og.rev 5.2.2.0 (2010/11/01) setMsglbl å»?­¢ â‡?setLbl に置換え
589             *
590             * @param   lbls è¤?•°ラベルID(カンマ区åˆ?‚Š)
591             */
592            public void setLbls( final String lbls ) {
593    
594                    String[] array = getCSVParameter( lbls );
595    
596                    StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
597    
598                    buf.append( getLabel( array[0] ) );
599                    for( int i=1; i<array.length; i++ ) {
600                            buf.append( "," );
601                            buf.append( getLabel( array[i] ) );
602                    }
603    //              setMsglbl( buf.toString() );
604                    setLbl( buf.toString() );               // 5.2.2.0 (2010/11/01) setMsglbl å»?­¢ â‡?setLbl に置換え
605            }
606    
607            /**
608             * 【TAG】フィールド部åˆ?? colspan を指定しますã?
609             *
610             * @og.tag
611             * 通常は、ラベルとフィールドが、別のtdで囲われますã?しかしã?場合によってはã€?
612             * フィールド部の長ã�?‚«ラãƒ?�Œある場合ã?上下ã?カラãƒ?�¨の位置関係がおかしくなりã?
613             * ラベルとフィールドが離れて表示されるケースがありますã?
614             * こã?場合ã?長ã�?ƒ•ィールド部を持つカラãƒ?�«、colspan 属æ?を指定するとã€?
615             * そã?åˆ??カラãƒ?‚’割り当てることにより、上下ã?カラãƒ?�¨の位置関係を
616             * 調ç¯?�™ることが可能になりますã?
617             * 通常はã€? を指定して、フィールドã?ラベル、フィールドã?
618             * çµ?�¿合わせ部åˆ?�«ã€?•·ã�?ƒ•ィールドが適用されるよã�?�«使用しますã?
619             *
620             *  &lt;og:input name="PN" colspan="3" /&gt;
621             *
622             * @og.rev 3.0.1.4 (2003/03/17) colspan 属æ?を追åŠ??
623             *
624             * @param   sp フィールド部åˆ??colspan
625             */
626            public void setColspan( final String sp ) {
627                    colspan = nval( getRequestParameter( sp ),colspan );
628                    if( colspan.length() > 0 ) {
629                            colspan = " colspan=\"" + colspan + "\" ";
630                    }
631            }
632    
633            /**
634             * 【TAG】å?力カーソルを指定されたname属æ?のフィールドへ自動的に移動しますã?
635             *
636             * @og.tag
637             * JavaScript の onKeyup イベントを利用して、最大桁数まで入力するとã€?
638             * 次のフィールドに、è?動的に飛ã?ように設定しますã?
639             * 引数は、次に飛ã?すフィールドã? name 属æ?ですã?
640             * 実行するには、JavaScript の nextForm ファンクションがå¿?¦�ですã?(default.js でæŒ?®?
641             *
642             * @og.rev 3.5.4.2 (2003/12/15) 新規追åŠ?
643             *
644             * @param   name 次にフォーカスを移すタグのname属æ?
645             */
646            public void setNextForm( final String name ) {
647                    nextForm = nval( getRequestParameter( name ),nextForm );
648            }
649    
650            /**
651             * こã?オブジェクトã?æ–?­—å?表現を返しますã?
652             * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
653             *
654             * @return こã?クラスのæ–?­—å?表現
655             */
656            @Override
657            public String toString() {
658                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
659                                    .println( "VERSION"                                     ,VERSION                        )
660                                    .println( "td_flag"                                     ,td_flag                        )
661                                    .println( "colspan"                                     ,colspan                        )
662                                    .println( "nextForm"                            ,nextForm                       )
663                                    .println( "CHECK_TYPE"                          ,CHECK_TYPE                     )
664                                    .println( "HTML_LABEL_SEPARATOR"        ,CLM                            )
665                                    .println( "HTML_COLUMNS_MAXSIZE"        ,COLUMNS_MAXSIZE        )
666                                    .println( "Other..."                            ,getAttributes().getAttribute() )
667                                    .fixForm().toString() ;
668            }
669    }