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