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.fukurou.util.XHTMLTag;
020    
021    import org.opengion.fukurou.util.StringUtil;
022    
023    /**
024     * 【å?力ã?è¤?•°行ã?入力が可能なãƒ?‚­ストå?力フィールドを作æ?するHTML拡張タグですã?
025     *
026     * name 属æ?に ラベルリソース のキーを与えることでã€?ロケールにあわせたリソースを使用してã€?
027     * 画面に表示しますã?
028     * ロケールは、ユーザーæƒ??の lang 属æ?をå?期å?で使用しã? セãƒ?ƒˆされてã�?�ªã�??合ã?ã€?
029     * リクエスト情報のロケールから取得しますã?
030     * ラベル部åˆ?�¨入力フィールド部åˆ?�Œãƒ??ブルタグの <td> により左右にåˆ?‰²されますã?
031     * HTML 表示時ã?、前後に<tr>タグで囲ってã€?整形できますã?
032     *
033     * @og.formSample
034     * ●形式ï¼?lt;og:queryOption >
035     *             SELECTæ–?
036     *         </og:queryOption >
037     * ●body?šあã‚?EVAL_BODY_BUFFERED:BODYを評価しã?{@XXXX} を解析しまã�?
038     *
039     * ●Tag定義??
040     *   <og:textarea
041     *       name             ○ã?HTML】名前をæŒ?®šしまã�?å¿??)ã€?
042     *       lbl                【TAG】ラベルリソースのラベルIDを指定しまã�?
043     *       rows               【HTML】高さ(行数)を指定しまã�?
044     *       cols               【HTML】横å¹?カラãƒ?•°)を指定しまã�?
045     *       must               【TAG】å¿??入力を表す色に変えるかどã�?�‹[true/false]を指定しまã�?初期値:false)
046     *       mustAny            【TAG】選択å¿??入åŠ?どれかひとつå¿??)を表す色[true/mustAny/そã?他]を指定しまã�?初期値:無æŒ?®?
047     *       aimai              【TAG】曖昧検索可能フィールドとして、曖昧検索方法をæŒ?®šしまã�?初期値:null)
048     *       id                 【HTML】要ç´?�«対して固有ã?名前(id)をつける場合に設定しまã�?
049     *       lang               【HTML】要ç´??å†?®¹と他ã?属æ?値のè¨?ª?lang,xml:lang)を指定しまã�?
050     *       dir                【HTML】文字表記ã?方å�?dir)を指定しまã�?
051     *       title              【HTML】要ç´?�«対する補足çš?ƒ…報(title)を設定しまã�?
052     *       style              【HTML】この要ç´?�«対して適用させるスタイルシーãƒ?style)を設定しまã�?
053     *       readonly           【TAG】その部品に対して変更がå?来なã�?‚ˆã�?�«(readonly)æŒ?®šしまã�?サーバã?に送信されã‚?
054     *       disabled           【TAG】その部品に対してã€?�¸択や変更がå?来なã�?‚ˆã�?�«(disabled)æŒ?®šしまã�?サーバã?に送信されなã�?
055     *       tabindex           【HTML】タブã?移動é?(tabindex)を指定しまã�?0 ??32767)
056     *       accesskey          【HTML】アクセスキー(alt+キーで直接æŒ?®?を割り当てまã�?
057     *       clazz              【HTML】要ç´?�«対して class 属æ?を設定しまã�?
058     *       language           【TAG】タグå†?ƒ¨で使用するè¨?ªžコード[ja/en/zh/…]を指定しまã�?
059     *       onClick            【HTML】JavaScriptのイベンãƒ?onClick を設定しまã�?ä¾?onClick="renew('query.jsp','QUERY');")
060     *       onBlur             【HTML】JavaScriptのイベンãƒ?onBlur を設定しまã�?ä¾?onBlur="this.value=value.toUpperCase();")
061     *       onFocus            【HTML】JavaScriptのイベンãƒ?onFocus を設定しまã�?
062     *       ondblClick         【HTML】JavaScriptのイベンãƒ?ondblClick を設定しまã�?
063     *       onMouseDown        【HTML】JavaScriptのイベンãƒ?onMouseDown を設定しまã�?
064     *       onMouseUp          【HTML】JavaScriptのイベンãƒ?onMouseUp を設定しまã�?
065     *       onMouseMove        【HTML】JavaScriptのイベンãƒ?onMouseMove を設定しまã�?
066     *       onMouseOut         【HTML】JavaScriptのイベンãƒ?onMouseOut を設定しまã�?
067     *       onMouseOver        【HTML】JavaScriptのイベンãƒ?onMouseOver を設定しまã�?
068     *       onSelect           【HTML】JavaScriptのイベンãƒ?onSelect を設定しまã�?
069     *       onKeydown          【HTML】JavaScriptのイベンãƒ?onKeydown を設定しまã�?
070     *       onKeypress         【HTML】JavaScriptのイベンãƒ?onKeypress を設定しまã�?
071     *       onKeyup            【HTML】JavaScriptのイベンãƒ?onKeyup を設定しまã�?
072     *       autofocus          【HTML5】指定したå?力æ¬?�«カーソルが当たって自動的にフォーカスされますã?
073     *       placeholder        【HTML5】å?力æ¬?�«初期表示するå†?®¹を指定しますã?
074     *       required           【HTML5】å?力å¿??を指定しまã�?
075     *       roles              【TAG】ロールをセãƒ?ƒˆしまã�?
076     *       debug              【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
077     *   >   ... Body ...
078     *   </og:textarea>
079     *
080     * ●使用ä¾?
081     *     <og:textarea name="BUN" />
082     *
083     *     <og:textarea name="BUN">            初期値に値をセãƒ?ƒˆしたã�?�¨ã�?
084     *         test
085     *     </og:textarea name="BUN">
086     *
087     * @og.group 画面部å“?
088     *
089     * @version  4.0
090     * @author   Kazuhiko Hasegawa
091     * @since    JDK5.0,
092     */
093    public class TextareaTag extends HTMLTagSupport {
094            //* こã?プログラãƒ??VERSIONæ–?­—å?を設定しますã?       {@value} */
095            private static final String VERSION = "5.2.1.0 (2010/10/01)" ;
096    
097            private static final long serialVersionUID = 521020101001L ;
098    
099            /**
100             * Taglibの開始タグが見つかったときに処ç�?�™ã‚?doStartTag() ã‚?オーバã?ライドしますã?
101             *
102             * @return      後続å?ç�??æŒ?¤º( EVAL_BODY_BUFFERED )
103             */
104            @Override
105            public int doStartTag() {
106                    return( EVAL_BODY_BUFFERED );   // Body を評価するã€? extends BodyTagSupport æ™?
107            }
108    
109            /**
110             * Taglibのタグ本体を処ç�?�™ã‚?doAfterBody() ã‚?オーバã?ライドしますã?
111             *
112             * @og.rev 3.1.1.0 (2003/03/28) ボディのå†?®¹を取得するå?ç�?‚’、CommonTagSupport で行うã€?
113             * @og.rev 3.1.1.0 (2003/03/28) body 属æ?にã€?{@XXXX} パã?ス機è?を付加するã€?
114             *
115             * @return      後続å?ç�??æŒ?¤º(SKIP_BODY)
116             */
117            @Override
118            public int doAfterBody() {
119                    String str = getBodyString();
120    
121                    if( str != null && str.length() > 0 ) {
122                            String label = StringUtil.htmlFilter( str );
123                            if( label != null && label.length() > 0 ) {
124                                    set( "body",label );
125                            }
126                    }
127    
128                    return(SKIP_BODY);
129            }
130    
131            /**
132             * 検索条件の入力用のãƒ?‚­ストフィールドを作æ?しますã?
133             *
134             * ãƒ??ブルタグによりフィールドã?åˆ?‰²されますã?
135             * 使用時ã?、テーブルタグを前後に使用して下さã�??
136             *
137             * @og.rev 4.3.7.1 (2009/06/08) id=labelのclassåŒ?
138             * @og.rev 5.2.1.0 (2010/10/01) must , mustAny 属æ?をè?動化しますã?
139             * @og.rev 5.8.4.1 (2015/02/20) aimai対å¿?6.2.0.0é€?§»æ¤?
140             *
141             * @return  入力用のãƒ?‚­ストフィールドタグ
142             */
143            @Override
144            protected String makeTag() {
145                    StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
146                    if( getMsglbl()  == null ) { setLbl( get( "name" ) ); }
147    
148                    // 4.3.7.1 (2009/06/08) id=labelのclassåŒ?
149                    // rtn.append( "<td id=\"label\">" );
150                    rtn.append( "<td class=\"label\">" );
151                    rtn.append( getLongLabel() );           // 4.0.0 (2005/01/31)
152                    rtn.append( "</td>" );
153                    rtn.append( "<td>" );
154                    rtn.append( XHTMLTag.textarea( getAttributes() ) );
155                    rtn.append( "</td>" );
156    
157                    rtn.append( makeAimaiPicker( get( "name" ) ) );
158                    // 5.2.1.0 (2010/10/01) must , mustAny 属æ?をè?動化しますã?
159                    if( getMustType() != null ) { rtn.append( makeMustHidden( get( "name" ) ) ); }
160    
161                    return rtn.toString() ;
162            }
163    
164            /**
165             * 【HTML】名前をæŒ?®šしますã?
166             *
167             * @og.tag 名前を指定しますã?
168             *
169             * @param   name 名前
170             */
171            public void setName( final String name ) {
172                    set( "name",getRequestParameter( name ) );
173            }
174    
175            /**
176             * 【HTML】高さ(行数)を指定しますã?
177             *
178             * @og.tag 高さ(行数)を指定しますã?
179             *
180             * @param   rows 高さ(行数)
181             */
182            public void setRows( final String rows ) {
183                    set( "rows",getRequestParameter( rows ) );
184            }
185    
186            /**
187             * 【HTML】横å¹?カラãƒ?•°)を指定しますã?
188             *
189             * @og.tag 横å¹?‚’æŒ?®šしますã?
190             *
191             * @param   cols 横å¹?カラãƒ?•°)
192             */
193            public void setCols( final String cols ) {
194                    set( "cols",getRequestParameter( cols ) );
195            }
196    }