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 }