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     *       autofocus          【HTML5】指定した?力?カーソルが当たって自動的にフォーカスされます?
072     *       placeholder        【HTML5】?力?初期表示する?を指定します?
073     *       required           【HTML5】?力??を指定しま?
074     *       roles              【TAG】ロールをセ?しま?
075     *       debug              【TAG】デバッグ??を?力するかど?[true/false]を指定しま?初期値:false)
076     *   >   ... Body ...
077     *   </og:textarea>
078     *
079     * ●使用?
080     *     <og:textarea name="BUN" />
081     *
082     *     <og:textarea name="BUN">            初期値に値をセ?した??
083     *         test
084     *     </og:textarea name="BUN">
085     *
086     * @og.group 画面部?
087     *
088     * @version  4.0
089     * @author   Kazuhiko Hasegawa
090     * @since    JDK5.0,
091     */
092    public class TextareaTag extends HTMLTagSupport {
093            //* こ?プログラ??VERSION??を設定します?       {@value} */
094            private static final String VERSION = "5.2.1.0 (2010/10/01)" ;
095    
096            private static final long serialVersionUID = 521020101001L ;
097    
098            /**
099             * Taglibの開始タグが見つかったときに処??doStartTag() ?オーバ?ライドします?
100             *
101             * @return      後続????( EVAL_BODY_BUFFERED )
102             */
103            @Override
104            public int doStartTag() {
105                    return( EVAL_BODY_BUFFERED );   // Body を評価する? extends BodyTagSupport ?
106            }
107    
108            /**
109             * Taglibのタグ本体を処??doAfterBody() ?オーバ?ライドします?
110             *
111             * @og.rev 3.1.1.0 (2003/03/28) ボディの?を取得する??、CommonTagSupport で行う?
112             * @og.rev 3.1.1.0 (2003/03/28) body 属?に?{@XXXX} パ?ス機?を付加する?
113             *
114             * @return      後続????(SKIP_BODY)
115             */
116            @Override
117            public int doAfterBody() {
118                    String str = getBodyString();
119    
120                    if( str != null && str.length() > 0 ) {
121                            String label = StringUtil.htmlFilter( str );
122                            if( label != null && label.length() > 0 ) {
123                                    set( "body",label );
124                            }
125                    }
126    
127                    return(SKIP_BODY);
128            }
129    
130            /**
131             * 検索条件の入力用の?ストフィールドを作?します?
132             *
133             * ??ブルタグによりフィールド??されます?
134             * 使用時?、テーブルタグを前後に使用して下さ??
135             *
136             * @og.rev 4.3.7.1 (2009/06/08) id=labelのclass?
137             * @og.rev 5.2.1.0 (2010/10/01) must , mustAny 属?を?動化します?
138             *
139             * @return  入力用の?ストフィールドタグ
140             */
141            @Override
142            protected String makeTag() {
143                    StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
144                    if( getMsglbl()  == null ) { setLbl( get( "name" ) ); }
145    
146                    // 4.3.7.1 (2009/06/08) id=labelのclass?
147                    // rtn.append( "<td id=\"label\">" );
148                    rtn.append( "<td class=\"label\">" );
149                    rtn.append( getLongLabel() );           // 4.0.0 (2005/01/31)
150                    rtn.append( "</td>" );
151                    rtn.append( "<td>" );
152                    rtn.append( XHTMLTag.textarea( getAttributes() ) );
153                    rtn.append( "</td>" );
154    
155                    // 5.2.1.0 (2010/10/01) must , mustAny 属?を?動化します?
156                    if( getMustType() != null ) { rtn.append( makeMustHidden( get( "name" ) ) ); }
157    
158                    return rtn.toString() ;
159            }
160    
161            /**
162             * 【HTML】名前を?します?
163             *
164             * @og.tag 名前を指定します?
165             *
166             * @param   name 名前
167             */
168            public void setName( final String name ) {
169                    set( "name",getRequestParameter( name ) );
170            }
171    
172            /**
173             * 【HTML】高さ(行数)を指定します?
174             *
175             * @og.tag 高さ(行数)を指定します?
176             *
177             * @param   rows 高さ(行数)
178             */
179            public void setRows( final String rows ) {
180                    set( "rows",getRequestParameter( rows ) );
181            }
182    
183            /**
184             * 【HTML】横?カラ?)を指定します?
185             *
186             * @og.tag 横??します?
187             *
188             * @param   cols 横?カラ?)
189             */
190            public void setCols( final String cols ) {
191                    set( "cols",getRequestParameter( cols ) );
192            }
193    }