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 }