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.fukurou.util.XHTMLTag; 019 020import org.opengion.fukurou.util.StringUtil; 021 022/** 023 * 【入力】複数行の入力が可能なテキスト入力フィールドを作成するHTML拡張タグです。 024 * 025 * name 属性に ラベルリソース のキーを与えることで、 ロケールにあわせたリソースを使用して、 026 * 画面に表示します。 027 * ロケールは、ユーザー情報の lang 属性を初期値で使用し、 セットされていない場合は、 028 * リクエスト情報のロケールから取得します。 029 * ラベル部分と入力フィールド部分がテーブルタグの <td> により左右に分割されます。 030 * HTML 表示時は、前後に<tr>タグで囲って、 整形できます。 031 * 032 * @og.formSample 033 * ●形式:<og:queryOption > 034 * SELECT文 035 * </og:queryOption > 036 * ●body:あり(EVAL_BODY_BUFFERED:BODYを評価し、{@XXXX} を解析します) 037 * 038 * ●Tag定義: 039 * <og:textarea 040 * name ○【HTML】名前を指定します(必須)。 041 * lbl 【TAG】ラベルリソースのラベルIDを指定します 042 * rows 【HTML】高さ(行数)を指定します 043 * cols 【HTML】横幅(カラム数)を指定します 044 * must 【TAG】必須入力を表す色に変えるかどうか[true/false]を指定します(初期値:false) 045 * mustAny 【TAG】選択必須入力(どれかひとつ必須)を表す色[true/mustAny/その他]を指定します(初期値:無指定) 046 * useMustHidden 【TAG】必須の自動チェック用Hiddenを出力するかどうか[true/false]を指定します(初期値:true) 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 * useRealTimeCheck 【TAG】(通常は使いません)リアルタイムチェックを行うかどうか(初期値:true:行う) 5.9.32.2 (2018/05/18) 077 * caseKey 【TAG】このタグ自体を利用するかどうかの条件キーを指定します(初期値:null) 078 * caseVal 【TAG】このタグ自体を利用するかどうかの条件値を指定します(初期値:null) 079 * caseNN 【TAG】指定の値が、null/ゼロ文字列 でない場合(Not Null=NN)は、このタグは使用されます(初期値:判定しない) 080 * caseNull 【TAG】指定の値が、null/ゼロ文字列 の場合は、このタグは使用されます(初期値:判定しない) 081 * caseIf 【TAG】指定の値が、true/TRUE文字列の場合は、このタグは使用されます(初期値:判定しない) 082 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 083 * > ... Body ... 084 * </og:textarea> 085 * 086 * ●使用例 087 * <og:textarea name="BUN" /> 088 * 089 * <og:textarea name="BUN"> 初期値に値をセットしたいとき 090 * test 091 * </og:textarea name="BUN"> 092 * 093 * @og.group 画面部品 094 * 095 * @version 4.0 096 * @author Kazuhiko Hasegawa 097 * @since JDK5.0, 098 */ 099public class TextareaTag extends HTMLTagSupport { 100 /** このプログラムのVERSION文字列を設定します。 {@value} */ 101 private static final String VERSION = "6.9.8.0 (2018/05/28)" ; 102 private static final long serialVersionUID = 698020180528L ; 103 104 /** 105 * デフォルトコンストラクター 106 * 107 * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor. 108 */ 109 public TextareaTag() { super(); } // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。 110 111 /** 112 * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。 113 * 114 * @og.rev 6.3.4.0 (2015/08/01) caseKey,caseVal,caseNN,caseNull,caseIf 属性対応 115 * 116 * @return 後続処理の指示( EVAL_BODY_BUFFERED ) 117 */ 118 @Override 119 public int doStartTag() { 120 // 6.4.1.1 (2016/01/16) PMD refactoring. A method should have only one exit point, and that should be the last statement in the method 121 // 反転注意 122 return useTag() 123 ? EVAL_BODY_BUFFERED // Body を評価する。( extends BodyTagSupport 時) 124 : SKIP_BODY ; 125 126 } 127 128 /** 129 * Taglibのタグ本体を処理する doAfterBody() を オーバーライドします。 130 * 131 * @og.rev 3.1.1.0 (2003/03/28) ボディの内容を取得する処理を、CommonTagSupport で行う。 132 * @og.rev 3.1.1.0 (2003/03/28) body 属性に、 {@XXXX} パース機能を付加する。 133 * 134 * @return 後続処理の指示(SKIP_BODY) 135 */ 136 @Override 137 public int doAfterBody() { 138 final String str = getBodyString(); 139 140 if( str != null && str.length() > 0 ) { 141 final String label = StringUtil.htmlFilter( str ); 142 if( label != null && label.length() > 0 ) { 143 set( "body",label ); 144 } 145 } 146 147 return SKIP_BODY ; 148 } 149 150 /** 151 * 検索条件の入力用のテキストフィールドを作成します。 152 * 153 * テーブルタグによりフィールドは分割されます。 154 * 使用時は、テーブルタグを前後に使用して下さい。 155 * 156 * @og.rev 4.3.7.1 (2009/06/08) id=labelのclass化 157 * @og.rev 5.2.1.0 (2010/10/01) must , mustAny 属性を自動化します。 158 * @og.rev 6.2.0.0 (2015/02/27) aimai 属性を追加。 159 * 160 * @return 入力用のテキストフィールドタグ 161 * @og.rtnNotNull 162 */ 163 @Override 164 protected String makeTag() { 165 final String name = get( "name" ); // 6.2.0.0 (2015/02/27) 後で使うので変数化 166 167 if( getMsglbl() == null ) { setLbl( name ); } 168 169 final StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE ) 170 // 4.3.7.1 (2009/06/08) id=labelのclass化 171 // rtn.append( "<td id=\"label\">" ); 172 .append( "<td class=\"label\">" ) 173 .append( getLongLabel() ) // 4.0.0 (2005/01/31) 174 .append( "</td>" ) 175 .append( "<td>" ) 176 .append( XHTMLTag.textarea( getAttributes() ) ) 177 .append( "</td>" ) 178 .append( makeAimaiPicker( name ) ) // 6.2.0.0 (2015/02/27) aimai 属性を追加 179 .append( makeMustHidden( name ) ); // 6.2.0.0 (2015/02/27) , 5.6.2.2 (2013/03/15) 180 181 return rtn.toString() ; 182 } 183 184 /** 185 * 【HTML】名前を指定します。 186 * 187 * @og.tag 名前を指定します。 188 * 189 * @param name 名前 190 */ 191 public void setName( final String name ) { 192 set( "name",getRequestParameter( name ) ); 193 } 194 195 /** 196 * 【HTML】高さ(行数)を指定します。 197 * 198 * @og.tag 高さ(行数)を指定します。 199 * 200 * @param rows 高さ(行数) 201 */ 202 public void setRows( final String rows ) { 203 set( "rows",getRequestParameter( rows ) ); 204 } 205 206 /** 207 * 【HTML】横幅(カラム数)を指定します。 208 * 209 * @og.tag 横幅を指定します。 210 * 211 * @param cols 横幅(カラム数) 212 */ 213 public void setCols( final String cols ) { 214 set( "cols",getRequestParameter( cols ) ); 215 } 216 217 /** 218 * 【TAG】リアルタイムチェックを行うかどうかを指定します(初期値:true)。 219 * 220 * @og.tag 221 * カラム単位でリアルタイムチェックを行うかどうかを設定をします。 222 * タグに独自属性としてrealTimeCheck="true/false"を追記します。 223 * falseを設定した場合にチェックが行われなくなります。 224 * 初期値はリアルタイムチェックを行う(true)です。 225 * 226 * この属性は、optionAttributesへの設定と同様の動作を行います。 227 * 引数の文字列の、true/false 判定を行っていません。そのままの文字列が設定されます。 228 * JavaScript 側では、false 判定のみ行っているので、不正な文字列の場合は、 229 * 初期値(true:リアルタイムチェックを行う)が適用されます。 230 * これは、Ver5 とロジックを合わせておくための処置です。 231 * 232 * @og.rev 5.9.32.2 (2018/05/18) 新規追加 233 * @og.rev 6.9.8.0 (2018/05/28) Ver5 とロジックを合わせます。 234 * 235 * @param flag リアルタイムチェックを行うかどうか [true:行う/false:行わない] 236 */ 237 public void setUseRealTimeCheck( final String flag ) { 238 // optionAttributes扱いで登録します。 239 final String rtcf = getRequestParameter( flag ); 240 241 if( StringUtil.isNotNull( rtcf ) ){ 242 add( "optionAttributes", "realTimeChk=\"" + rtcf + "\"" ); // 連結時のスペースは、Attributes クラスで処理 243 } 244 245// // optionAttributes扱いで登録します。 246// final boolean useRtc = StringUtil.nval( getRequestParameter( flag ) , true ); 247// 248// if( !useRtc ) { // true 以外の場合のみ、optionAttributes に属性を追加します。 249// add( "optionAttributes", "realTimeChk=\"false\"" ); // 連結時のスペースは、Attributes クラスで処理 250// } 251 } 252}