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 import org.opengion.fukurou.util.StringUtil; 022 023 import static org.opengion.fukurou.util.StringUtil.nval ; 024 025 /** 026 * ?フィールドを作?するタグで?bodyHidden は?しました)? 027 * name属?をキーにvalue属?をセ?します? 028 * 通常のhiddenタグの他に、BODY部に記述した値を?信することができます? 029 * BODY部に記述した値は、リターンコードが取り除かれます? 030 * また?keys属?、vals属?を指定することで、?のキー??を同時に設定できます? 031 * 032 * @og.formSample 033 * ●形式? 034 * ・<og:hidden name="…" value="…" /> 035 * ・<og:hidden keys="…" vals="…" /> 036 * ・<og:hidden name="…" /> 037 * ??? 038 * </og:hidden> 039 * ●body?あ?EVAL_BODY_BUFFERED:BODYを評価し?{@XXXX} を解析しま? 040 * 041 * ●Tag定義?? 042 * <og:hidden 043 * name 【TAG】名前を?しま?name属?とkeys属?は同時には登録できません) 044 * value 【TAG】?を指定しま?こ?属?を使?BODY部は無視されま? 045 * keys 【TAG】名前をCSV形式で??しま?name属?とkeys属?は同時には登録できません) 046 * vals 【TAG】keys属?に対応する?をCSV形式で??しま? 047 * defaultVal 【TAG】value属?に値がセ?されて??きに、?期?をセ?しま? 048 * caseKey 【TAG】このタグ自体を利用するかど?の条件キーを指定しま?初期値:null) 049 * caseVal 【TAG】このタグ自体を利用するかど?の条件値を指定しま?初期値:null) 050 * caseNN 【TAG】指定?値が?null/ゼロ?? でな???Not Null=NN)は、このタグは使用されま?初期値:true) 051 * caseNull 【TAG】指定?値が?null/ゼロ?? の場合?、このタグは使用されま?初期値:true) 052 * debug 【TAG】デバッグ??を?力するかど?[true/false]を指定しま?初期値:false) 053 * > ... Body ... 054 * </og:hidden> 055 * 056 * ●使用? 057 * ・次画面にPNと?名前で{@PN}に入って?値を渡します? 058 * <input:hidden name="PN" value="{@PN}" /> 059 * 060 * ・次画面で使用するPLSQLと引数を渡します? 061 * <input:hidden name="name" value="UNIQ,LKIS,KBLOYA,KBLKO,KBNGK,HJO,KBLKNM" /> 062 * <input:hidden name="SQL" value="{ call RKP0011B.RK0011B( ?,?,?,?,? ) }" /> 063 * ? 064 * <og:plsqlUpdate 065 * command = "{@command}" 066 * names = "{@names}" 067 * dbType = "RK0011ARG" 068 * queryType = "JDBCPLSQL" > 069 * {@SQL} 070 * </og:plsqlUpdate> 071 * 072 * ・次画面にSQLと?名前でBodyに記述した値を渡します? 073 * <og:hidden name="SQL" 074 * SELECT AAA 075 * FROM RK01 076 * WHERE UNIQ = ? 077 * </og:hidden> 078 * 079 * @og.group 画面部? 080 * 081 * @version 4.0 082 * @author Kazuhiko Hasegawa 083 * @since JDK5.0, 084 */ 085 public class HiddenTag extends CommonTagSupport { 086 //* こ?プログラ??VERSION??を設定します? {@value} */ 087 private static final String VERSION = "5.2.2.0 (2010/11/01)" ; 088 089 private static final long serialVersionUID = 522020101101L ; 090 091 private boolean isValue = false; 092 private String name = null; 093 private String value = null; // 3.5.5.5 (2004/04/23) value属?を追? 094 private String keys = null; 095 private String[] vals = null; 096 private String defaultVal = null; // 3.8.5.1 (2006/05/08) defaultVal 属?を追? 097 098 /** 099 * Taglibの開始タグが見つかったときに処??doStartTag() ?オーバ?ライドします? 100 * 101 * @og.rev 3.0.0.0 (2002/12/25) BodyHiddenTag ?に伴??機?拡張? 102 * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属?対? 103 * 104 * @return 後続???? 105 */ 106 @Override 107 public int doStartTag() { 108 // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属?対? 109 // if( isValue ) { return(SKIP_BODY); } // Body を評価しな? 110 // else { return( EVAL_BODY_BUFFERED ); } // Body を評価する? extends BodyTagSupport ? 111 112 if( useTag() && !isValue ) { 113 return( EVAL_BODY_BUFFERED ); // Body を評価する? extends BodyTagSupport ? 114 } 115 return(SKIP_BODY); // Body を評価しな? 116 } 117 118 /** 119 * Taglibのタグ本体を処??doAfterBody() ?オーバ?ライドします? 120 * 121 * @og.rev 3.0.0.0 (2002/12/25) BodyHiddenTag ?に伴??機?拡張? 122 * @og.rev 3.1.1.0 (2003/03/28) ボディの?を取得する??、CommonTagSupport で行う? 123 * @og.rev 3.5.5.5 (2004/04/23) value属?を追? 124 * 125 * @return 後続????(SKIP_BODY) 126 */ 127 @Override 128 public int doAfterBody() { 129 String val = getBodyString(); 130 131 if( val != null && val.length() > 0 ) { 132 value = StringUtil.replace( val,HybsSystem.CR," " ); 133 } 134 135 return(SKIP_BODY); 136 } 137 138 /** 139 * Taglibの終?グが見つかったときに処??doEndTag() ?オーバ?ライドします? 140 * 141 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応?release2() ?doEndTag()で呼ぶ? 142 * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属?対? 143 * 144 * @return 後続???? 145 */ 146 @Override 147 public int doEndTag() { 148 debugPrint(); // 4.0.0 (2005/02/28) 149 // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属?対? 150 if( useTag() ) { 151 jspPrint( makeTag() ); 152 } 153 return(EVAL_PAGE); 154 } 155 156 /** 157 * タグリブオブジェクトをリリースします? 158 * キャ?ュされて再利用される?で、フィールド?初期設定を行います? 159 * 160 * @og.rev 3.0.0.0 (2002/12/25) BodyHiddenTag ?に伴??機?拡張? 161 * @og.rev 3.0.1.0 (2003/03/03) names属?とvals属?を追? 162 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応?release2() ?doEndTag()で呼ぶ? 163 * @og.rev 3.5.5.5 (2004/04/23) value属?を追? 164 * @og.rev 3.8.5.1 (2006/05/08) defaultVal 属?を追? 165 * 166 */ 167 @Override 168 protected void release2() { 169 super.release2(); 170 isValue = false; 171 name = null; 172 value = null; 173 keys = null; 174 vals = null; 175 defaultVal = null; // 3.8.5.1 (2006/05/08) defaultVal 属?を追? 176 } 177 178 /** 179 * ?フィールドを作?します? 180 * 181 * hidden( name ,value ) 182 * 183 * <input type="hidden" name="名前" value="???> 184 * <input type="hidden" keys="名前1,名前2???" vals="値1,値2???"> 185 * 186 * @og.rev 3.0.1.0 (2003/03/03) names属?とvals属?を追? 187 * @og.rev 3.5.5.5 (2004/04/23) hidden の出力に、XHTMLTag.hidden を使用します? 188 * @og.rev 3.8.5.1 (2006/05/08) defaultVal 属?を追? 189 * 190 * @return ?フィールドタグ?? 191 */ 192 protected String makeTag() { 193 194 checkName() ; 195 196 final String rtn ; 197 if( keys == null ) { 198 // 注意:互換性維持?為、defaultVal を使用した場合?設定では null がセ? 199 // されな??して?す?使用しな??合?、null のままです? 200 // 3.8.5.1 (2006/05/08) defaultVal 属?を追? 201 if( defaultVal != null ) { 202 value = nval( value,defaultVal ); 203 } 204 rtn = XHTMLTag.hidden( name,value ); 205 } else { 206 StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 207 String[] nm = StringUtil.csv2Array( keys ); 208 for( int i=0; i<nm.length; i++ ) { 209 String nn = getRequestParameter( nm[i] ); 210 String vv = getRequestParameter( vals[i] ); 211 buf.append( XHTMLTag.hidden( nn,vv ) ).append( HybsSystem.CR ); 212 213 } 214 rtn = buf.toString(); 215 } 216 return rtn ; 217 } 218 219 /** 220 * name,value,keys,vals の相関関係をチェ?します? 221 * 222 * name,value が?ペアで、keys,valsが?ペアです? 223 * name属?とkeys属?は同時には登録できません? 224 * 225 * @og.rev 4.0.0.0 (2007/06/06) 新規追? 226 */ 227 private void checkName() { 228 if( name != null && keys != null ) { 229 String errMsg = "name属?とkeys属?は同時には登録できません? " + HybsSystem.CR 230 + "name=[" + name + "] keys=[" + keys + "]"; 231 throw new HybsSystemException( errMsg ); 232 } 233 234 if( name != null && vals != null ) { 235 String errMsg = "name属?とvals属?が設定されて?す?: " + HybsSystem.CR 236 + "name属?を指定する?合?、value属?を使用してください? + HybsSystem.CR 237 + "name=[" + name + "] vals=[" + StringUtil.array2line( vals,"," ) + "]"; 238 throw new HybsSystemException( errMsg ); 239 } 240 241 if( keys != null && value != null ) { 242 String errMsg = "keys属?とvalue属?が設定されて?す?: " + HybsSystem.CR 243 + "keys属?を指定する?合?、vals属?を使用してください? + HybsSystem.CR 244 + "keys=[" + keys + "] value=[" + value + "]"; 245 throw new HybsSystemException( errMsg ); 246 } 247 } 248 249 /** 250 * 【TAG】名前を?しま?name属?とkeys属?は同時には登録できません)? 251 * 252 * @og.tag 253 * 名前を指定します? 254 * name属?とkeys属?は同時には登録できません? 255 * 256 * @og.rev 3.0.1.0 (2003/03/03) names属?とvals属?を追? 257 * @og.rev 3.5.5.5 (2004/04/23) hidden の出力に、XHTMLTag.hidden を使用します? 258 * 259 * @param nm 名前 260 */ 261 public void setName( final String nm ) { 262 // if( keys != null ) { 263 // String errMsg = "name属?とkeys属?は同時には登録できません? " + HybsSystem.CR 264 // + "name=[" + nm + "] keys=[" + keys + "]"; 265 // throw new HybsSystemException( errMsg ); 266 // } 267 name = nval( getRequestParameter( nm ),name ); 268 } 269 270 /** 271 * 【TAG】?を指定しま?こ?属?を使?BODY部は無視されま?? 272 * 273 * @og.tag 274 * ここで値を設定した?合?、BODY 部の値は使用しません? 275 * value="{@value}" などとリクエスト変数を使用した場合に、その値? 276 * 設定されて??ースでも?こ?属?を使用したとみなされます? 277 * 278 * @og.rev 3.5.5.5 (2004/04/23) hidden の出力に、XHTMLTag.hidden を使用します? 279 * 280 * @param val 値 281 */ 282 public void setValue( final String val ) { 283 value = nval( getRequestParameter( val ),"" ); 284 isValue = true; 285 } 286 287 /** 288 * 【TAG】名前をCSV形式で??しま?name属?とkeys属?は同時には登録できません)? 289 * 290 * @og.tag 291 * 名前をCSV形式で??します? 292 * name属?とkeys属?は同時には登録できません? 293 * 294 * @og.rev 3.0.1.0 (2003/03/03) names属?とvals属?を追? 295 * @og.rev 4.0.0.0 (2007/06/06) names属?をkeys属?に変更 296 * 297 * @param ns 名前(CSV形? 298 */ 299 public void setKeys( final String ns ) { 300 // if( name != null ) { 301 // String errMsg = "name属?とkeys属?は同時には登録できません? " + HybsSystem.CR 302 // + "name=[" + name + "] keys=[" + ns + "]"; 303 // throw new HybsSystemException( errMsg ); 304 // } 305 keys = nval( getRequestParameter( ns ),keys ) ; 306 } 307 308 /** 309 * 【TAG】keys属?に対応する?をCSV形式で??します? 310 * 311 * @og.tag 312 * keys属?に対応する?をCSV形式で??します? 313 * keys属?が設定されて?場合?み、使用されます? 314 * ?方法?、CSV変数を?に?してから、getRequestParameter で値を取得します? 315 * こうしな???タ自身にカンマを持って?場合に?をミスる為です? 316 * 317 * @og.rev 3.0.1.0 (2003/03/03) names属?とvals属?を追? 318 * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用 319 * 320 * @param val 値(CSV形? 321 */ 322 public void setVals( final String val ) { 323 vals = getCSVParameter( val ); 324 } 325 326 /** 327 * 【TAG】value属?に値がセ?されて??きに、?期?をセ?します? 328 * 329 * @og.tag 330 * 注意:互換性維持?為、defaultVal を使用した場合?設定では null がセ? 331 * されな??して?す?使用しな??合?、null のままです? 332 * 333 * @og.rev 3.8.5.1 (2006/05/08) defaultVal 属?を追? 334 * 335 * @param dv 初期値 336 */ 337 public void setDefaultVal( final String dv ) { 338 defaultVal = nval( getRequestParameter( dv ),"" ); // 特? 339 } 340 341 /** 342 * こ?オブジェクト???表現を返します? 343 * 基本???目?使用します? 344 * 345 * @return こ?クラスの??表現 346 */ 347 @Override 348 public String toString() { 349 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 350 .println( "VERSION" ,VERSION ) 351 .println( "isValue" ,isValue ) 352 .println( "name" ,name ) 353 .println( "value" ,value ) 354 .println( "keys" ,keys ) 355 .println( "vals" ,vals ) 356 .println( "Other..." ,getAttributes().getAttribute() ) 357 .fixForm().toString() ; 358 } 359 }