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 */ 016package org.opengion.hayabusa.taglib; 017 018import org.opengion.hayabusa.common.HybsSystem; 019import org.opengion.fukurou.util.XHTMLTag; 020 021import 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 * ●形式:<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 */ 092public 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}