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