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.hayabusa.common.HybsSystemException;
020 import org.opengion.fukurou.util.XHTMLTag;
021
022 /**
023 * プルãƒ?‚¦ンメニューの選択é?目を作æ?するHTML拡張タグですã?
024 *
025 * name 属æ?は、ラベルリソース のキーを与えることで、使用する上位ã?タグの
026 * ロケールにあわせたリソースを使用して、画面に表示しますã?
027 * 従って、このタグでは ロケールはæŒ?®šできませんã€?
028 * selected属æ?は、そのタグが選ばれてã�?‚‹場合をã€?true" でæŒ?®šしますã? 初期値はã€?false" ですã?
029 *
030 * @og.formSample
031 * ●形式ï¼?lt;og:option value="…" lbl ="…" selected="…" />
032 * ●body?šなã�?
033 *
034 * ●Tag定義??
035 * <og:option
036 * value 【TAG】å?を指定しまã�?
037 * selected 【TAG】オプションを選択済みの状æ…?selected)にセãƒ?ƒˆしまã�?初期値:未選æŠ?
038 * lbl 【TAG】ラベルリソースのラベルIDを指定しまã�?
039 * lbls 【TAG】ラベルをCSV形式でè¤?•°æŒ?®šしまã�?
040 * label 【TAG】optionタグのラベルを指定しまã�?
041 * caseKey 【TAG】このタグ自体を利用するかどã�?�‹の条件キーを指定しまã�?初期値:null)
042 * caseVal 【TAG】このタグ自体を利用するかどã�?�‹の条件値を指定しまã�?初期値:null)
043 * caseNN 【TAG】指定ã?値がã?null/ゼロæ–?—å? でなã�??å�?Not Null=NN)は、このタグは使用されまã�?初期値:true)
044 * caseNull 【TAG】指定ã?値がã?null/ゼロæ–?—å? の場合ã?、このタグは使用されまã�?初期値:true)
045 * id 【HTML】要ç´?�«対して固有ã?名前(id)をつける場合に設定しまã�?
046 * lang 【HTML】要ç´??å†?®¹と他ã?属æ?値のè¨?ª?lang,xml:lang)を指定しまã�?
047 * dir 【HTML】文字表記ã?方å�?dir)を指定しまã�?
048 * title 【HTML】要ç´?�«対する補足çš?ƒ…報(title)を設定しまã�?
049 * style 【HTML】この要ç´?�«対して適用させるスタイルシーãƒ?style)を設定しまã�?
050 * disabled 【TAG】その部品に対してã€?�¸択や変更がå?来なã�?‚ˆã�?�«(disabled)æŒ?®šしまã�?サーバã?に送信されなã�?
051 * clazz 【HTML】要ç´?�«対して class 属æ?を設定しまã�?
052 * language 【TAG】タグå†?ƒ¨で使用するè¨?ªžコード[ja/en/zh/…]を指定しまã�?
053 * roles 【TAG】ロールをセãƒ?ƒˆしまã�?
054 * debug 【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
055 * />
056 *
057 * ●使用ä¾?
058 * プルãƒ?‚¦ンで選択すã‚?値(value) に対して ラベル(lbl) を付けられますã?
059 * <og:select name="ORDER_BY" lbl="ORDER_BY">
060 * <og:option value="SYSTEM_ID,CLM,LANG" lbl ="CLM" selected="selected" />
061 * </og:select>
062 *
063 * ラベルがè¤?•°ある場合ã?、lbls 属æ?を使用しますã?
064 * <og:select name="ORDER_BY" lbl="ORDER_BY">
065 * <og:option value="SYSTEM_ID,CLM,LANG" lbls="LANG,NAME_JA" />
066 * </og:select>
067 *
068 * MessageResource プロパティの値を使用したã�?�¨ききはlbl属æ?を使ã�?�¾すã?
069 * <og:select name="CDC">
070 * <og:option lbl="MSG0001" />
071 * </og:select>
072 *
073 * LabelResource プロパティの値を使用したã�?�¨ききはlbl属æ?を使ã�?�¾すã?
074 * <og:select name="CDC">
075 * <og:option lbl="CDC1" />
076 * </og:select>
077 *
078 * 選択肢の中からè¤?•°選択できるようにするときã?multiple属æ?を使ã�?�¾すã?
079 * <og:select name="CDC" multiple="multiple">
080 * <og:option value="AAA" />
081 * </og:select>
082 *
083 * 選択不可にするときã?disabled属æ?を使ã�?�¾すã?
084 * <og:select name="CDC" disabled="disabled">
085 * <og:option value="AAA" />
086 * </og:select>
087 *
088 * 選択肢をSELECTæ–??結果から作æ?したã�?�¨きã?queryOptionタグとçµ?�¿合わせて使ã�?�¾すã?
089 * <og:select name="CDC">
090 * <og:queryOption>
091 * select NOSYN,NOSYN,':',NMSYN from DB01 ORDER BY 1
092 * </og:queryOption>
093 * </og:select>
094 *
095 * @og.rev 5.7.1.0 (2013/12/06) DatalistTag 対応で、大å¹?�«見直ã�?
096 * @og.group 選択データ制御
097 *
098 * @version 4.0
099 * @author Kazuhiko Hasegawa
100 * @since JDK5.0,
101 */
102 public class OptionTag extends HTMLTagSupport {
103 //* こã?プログラãƒ??VERSIONæ–?—å?を設定しますã? {@value} */
104 private static final String VERSION = "5.7.1.0 (2013/12/06)" ;
105
106 private static final long serialVersionUID = 571020131206L ;
107
108 // private String code = null;
109
110 // 3.5.4.0 (2003/11/25) selVal 属æ?を追åŠ??
111 // 5.7.1.0 (2013/12/06) ローカル変数化しますã?
112 // private String selVal = null;
113 // private boolean multipleAll = false; // 3.8.0.9 (2005/10/17) è¤?•°選択可能時に全選択を設定するã?
114
115 /**
116 * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
117 *
118 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
119 * @og.rev 3.5.4.0 (2003/11/25) selVal 属æ?を追åŠ??
120 * @og.rev 3.8.0.9 (2005/10/17) è¤?•°選択可能時に全選択を設定するã?
121 * @og.rev 4.3.0.0 (2008/07/04) ロールモードã?ルチ対å¿?
122 * @og.rev 5.0.2.0 (2009/11/01) è¤?•°パラメーターの選択に対å¿?
123 * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
124 * @og.rev 5.7.1.0 (2013/12/06) findAncestorWithClass 等を、makeTag() に移動したためã?メソãƒ?ƒ‰自体が不要になったã?
125 *
126 * @return 後続å?ç�??æŒ?¤º
127 */
128 // @Override
129 // public int doEndTag() {
130 // debugPrint(); // 4.0.0 (2005/02/28)
131 // // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
132 // if( !useTag() ) { return(EVAL_PAGE); }
133 //
134 // // 4.0.0 (2005/11/30) æŒ?®šã?ロールがã?アクセス許可の場合ã?、å?力しますã?
135 // String roles = get( "roles" );
136 //// if( roles != null && ! getUser().isAccess( roles ) ) {
137 //// return(EVAL_PAGE);
138 //// }
139 // // 4.3.0.0 (2008/07/04) ロールモードã?ルチ対å¿?
140 // if( ! getUser().isAccess( roles ) ) {
141 // return(EVAL_PAGE);
142 // }
143 //
144 // SelectTag select = (SelectTag)findAncestorWithClass( this,SelectTag.class );
145 // if( select == null ) {
146 // String errMsg = "こã?タグは、SelectTag のBODY に記述するå¿?¦�がありますã?";
147 // throw new HybsSystemException( errMsg );
148 // }
149 //// selVal = select.getValue(); // 3.5.4.0 (2003/11/25)
150 // selVal = "|" + select.getValue() + "|"; // 5.0.2.0 (2009/11/01)
151 // multipleAll = select.isMultipleAll(); // 3.8.0.9 (2005/10/17) è¤?•°選択可能時に全選択を設定するã?
152 // select.addOption( makeTag() );
153 //
154 // return(EVAL_PAGE);
155 // }
156
157 /**
158 * タグリブオブジェクトをリリースしますã?
159 * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
160 *
161 * @og.rev 2.0.0.4 (2002/09/27) カスタãƒ?‚¿グの release() メソãƒ?ƒ‰をã?追åŠ?
162 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
163 * @og.rev 3.5.4.0 (2003/11/25) selVal 属æ?を追åŠ??
164 * @og.rev 5.7.1.0 (2013/12/06) selVal と、multipleAll がローカル変数化したためã?メソãƒ?ƒ‰自体が不要になったã?
165 *
166 */
167 // @Override
168 // protected void release2() {
169 // super.release2();
170 //// code = null;
171 // selVal = null;
172 // multipleAll = false; // 3.8.0.9 (2005/10/17) è¤?•°選択可能時に全選択を設定するã?
173 // }
174
175 /**
176 * ラベルを作æ?しますã?
177 *
178 * lbl 属æ?でセãƒ?ƒˆされたå?合ã??Œそちらを優先しますã?
179 * セãƒ?ƒˆされてã�?�ªã�??合ã??Œvalue 属æ?をキーにã€?
180 * LabelResource プロパティの値をセãƒ?ƒˆしますã?
181 * value 属æ?に、カンãƒ?,)で区åˆ?‚‰れたè¤?•°の Label ã‚?
182 * セãƒ?ƒˆできますã?
183 *
184 * @og.rev 3.5.4.0 (2003/11/25) selVal 属æ?を追åŠ??
185 * @og.rev 3.5.5.7 (2004/05/10) DBColumn.getOption( String ) メソãƒ?ƒ‰å»?¢
186 * @og.rev 3.8.0.9 (2005/10/17) è¤?•°選択可能時に全選択を設定するã?
187 * @og.rev 5.0.2.0 (2009/11/01) è¤?•°パラメーターの選択に対å¿?
188 * @og.rev 5.7.1.0 (2013/12/06) findAncestorWithClass を移å‹?
189 * @og.rev 5.7.1.0 (2013/12/06) SelectTag â‡?OptionAncestorIF に変更して、DatalistTag にも対応ã?
190 *
191 * @return null固定ï¼?ull を返せば、doEndTag() では、何もしなã�?¼?
192 */
193 @Override
194 protected String makeTag() {
195 // if( code != null ) {
196 // String val = nval( get( "value" ),selVal );
197 //
198 // // 次期バージョンでは、削除したã�?�¨思いますã?
199 // String tag = getDBColumn( code ).getEditorValue( val );
200 // int st = tag.indexOf( '>' );
201 // int end = tag.lastIndexOf( "</select" );
202 // return tag.substring( st+1,end );
203 // }
204
205 // 3.5.4.0 (2003/11/25) selVal 属æ?を追åŠ??
206 // if( ( selVal != null && selVal.length() > 0 && selVal.equals( get( "value" ) ) ) || multipleAll ) {
207 // 5.0.2.0 (2009/11/01)
208
209 // 5.7.1.0 (2013/12/06) findAncestorWithClass ã‚?doEndTag() から移å‹?
210 // SelectTag select = (SelectTag)findAncestorWithClass( this,SelectTag.class );
211 OptionAncestorIF select = (OptionAncestorIF)findAncestorWithClass( this,OptionAncestorIF.class );
212 if( select == null ) {
213 String errMsg = "<b>" + getTagName() + "タグは、SelectTag またã?、DatalistTag のBODY に記述するå¿?¦�がありますã?</b>";
214 throw new HybsSystemException( errMsg );
215 }
216
217 String selVal = "|" + select.getValue() + "|"; // 5.0.2.0 (2009/11/01)
218 boolean multipleAll = select.isMultipleAll(); // 3.8.0.9 (2005/10/17) è¤?•°選択可能時に全選択を設定するã?
219 // 5.7.1.0 (2013/12/06) 上位に上げるã?ではなくã?BODY部に出力するã?
220 // select.addOption( makeTag() );
221
222 if( ( selVal != null && selVal.length() > 0 && selVal.indexOf( "|" + get( "value" ) + "|" ) >= 0 ) || multipleAll ) {
223 set( "selected","selected" );
224 }
225
226 String msglbl = getMsglbl();
227 if( msglbl != null ) {
228 set( "body", msglbl );
229 }
230
231 select.addOption( XHTMLTag.option( getAttributes() ) );
232
233 return null;
234 }
235
236 /**
237 * 【TAG】å?を指定しますã?
238 *
239 * @og.tag
240 * ここでæŒ?®šしたå?がã?ルãƒ?‚¦ンメニュー中に存在する場合ã?選択状態になりますã?
241 *
242 * @param val 値を指å®?
243 */
244 public void setValue( final String val ) {
245 set( "value",getRequestParameter( val ) );
246 }
247
248 /**
249 * 【TAG】optionタグのラベルを指定しますã?
250 *
251 * @og.tag
252 * ここでのラベルは、optionタグのラベルですã?(lbl属æ?は、異なりますã?)
253 * これは、optgroup とともに使用される階層化メニュー時に使用されますã?
254 *
255 * @param label ラベル
256 */
257 public void setLabel( final String label ) {
258 set( "label",getRequestParameter( label ) );
259 }
260
261 /**
262 * 【TAG】オプションを選択済みの状æ…?selected)にセãƒ?ƒˆしまã�?初期値:未選æŠ?ã€?
263 *
264 * @og.tag
265 * selected="selected" またã? selected="true" 以外ã?値はセãƒ?ƒˆできなã�?‚ˆã�?�«
266 * 制限をかけますã?
267 * 初期値は、未選æŠ?ですã?
268 *
269 * @param sel [selected:選択済み/それ以å¤?未選択]
270 */
271 public void setSelected( final String sel ) {
272 String select = getRequestParameter( sel );
273 if( "selected".equalsIgnoreCase( select ) || "true".equalsIgnoreCase( select ) ) {
274 set( "selected","selected" );
275 }
276 }
277
278 // /**
279 // * 【å»?¢】コードリソースのコードID を指定しますã?
280 // *
281 // * @og.tag
282 // * コードリソースで定義されてã�?‚‹å†?®¹をå?利用しますã?基本çš?�«は、カラãƒ?ƒªソースでã€?
283 // * コードカラãƒ?±žæ?を定義して使用してくださいã€?
284 // *
285 // * @og.rev 4.0.0.0 (2007/06/18) å»?¢
286 // *
287 // * @param code String
288 // * @deprecated
289 // */
290 // @Deprecated public void setCode( final String code ) {
291 // this.code = getRequestParameter( code ) ;
292 // }
293
294 /**
295 * 【TAG】ラベルをCSV形式でè¤?•°æŒ?®šしますã?
296 *
297 * @og.tag
298 * シングルラベルの lbl 属æ?との違いは,ここではラベルをè¤?•° カンマ区åˆ?‚Šで
299 * 渡すことが可能であることですã?これによりã€?A,B,C" とã�?�†値に対してã€?
300 * "Aのラベル表示,Bのラベル表示,Cのラベル表示" とã�?�†具合にæ–?—å?ã‚?
301 * 再合成しますã?
302 * これは、SQLæ–??Ordr By 句で、ソートé?を指定するå?合などに便利ですã?
303 * <og:option lbls="MKNMJP,MKCD,MKNMEN" />
304 *
305 * åˆ?§£方法ã?、CSV変数をå?にåˆ?§£してから、getRequestParameter で値を取得しますã?
306 * こうしなã�?�¨ãƒ??タ自身にカンマを持ってã�?‚‹場合にåˆ?§£をミスる為ですã?
307 *
308 * @og.rev 3.5.6.2 (2004/07/05) 先に配å?にåˆ?§£してからリクエスト変数の値を取å¾?
309 * @og.rev 5.2.2.0 (2010/11/01) setMsglbl å»?¢ â‡?setLbl に置換え
310 *
311 * @param lbls è¤?•°ラベルID(カンマ区åˆ?‚Š)
312 */
313 public void setLbls( final String lbls ) {
314
315 String[] keys = getCSVParameter( lbls );
316 if( keys == null || keys.length == 0 ) { return ; }
317
318 StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
319 buf.append( getLabel( keys[0] ) );
320 for( int i=1; i<keys.length; i++ ) {
321 buf.append( "," );
322 buf.append( getLabel( keys[i] ) );
323 }
324 // setMsglbl( buf.toString() );
325 setLbl( buf.toString() ); // 5.2.2.0 (2010/11/01) setMsglbl å»?¢ â‡?setLbl に置換え
326 }
327
328 /**
329 * こã?オブジェクトã?æ–?—å?表現を返しますã?
330 * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
331 *
332 * @og.rev 5.7.1.0 (2013/12/06) selVal と、multipleAll をローカル変数化するã?
333 * @return こã?クラスのæ–?—å?表現
334 */
335 @Override
336 public String toString() {
337 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
338 .println( "VERSION" ,VERSION )
339 // .println( "code" ,code )
340 // .println( "selVal" ,selVal )
341 // .println( "multipleAll" ,multipleAll)
342 .println( "Other..." ,getAttributes().getAttribute() )
343 .fixForm().toString() ;
344 }
345 }