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