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.HybsSystemException; 019 import static org.opengion.fukurou.util.StringUtil.nval ; 020 021 import java.io.ObjectOutputStream; 022 import java.io.ObjectInputStream; 023 import java.io.IOException; 024 025 /** 026 * ProcessTag に対して、引数(パラメータ)を渡す?入れ子?子クラスです? 027 * 028 * @og.formSample 029 * ●形式?lt;og:param key="ZZZ" value="AAA,BBB" /> 030 * ●body?あ?EVAL_BODY_BUFFERED:BODYを評価し?{@XXXX} を解析しま? 031 * 032 * ●Tag定義?? 033 * <og:param 034 * key ○?TAG】リクエスト情報 に登録するキーをセ?しま???)? 035 * value 【TAG】リクエスト情報 に登録する値をセ?しま? 036 * debug 【TAG】デバッグ??を?力するかど?[true/false]を指定しま?初期値:false) 037 * > ... Body ... 038 * </og:param> 039 * 040 * ●使用? 041 * ??変数の渡し方 042 * <og:process ????? > 043 * <og:param key="AAA" value="111" /> 044 * <og:param key="BBB" value="222" /> 045 * <og:param key="CCC" value="333" /> 046 * <og:param key="DDD" value="444" /> 047 * </og:process > 048 * 049 * BODY 部に記述した変数の渡し方 050 * <og:process ????? > 051 * <og:param key="SQL" > 052 * SELECT * FROM DUAL 053 * </og:param> 054 * </og:process > 055 * 056 * @og.group 画面表示 057 * 058 * @version 4.0 059 * @author Kazuhiko Hasegawa 060 * @since JDK5.0, 061 */ 062 public class ParamTag extends CommonTagSupport { 063 //* こ?プログラ??VERSION??を設定します? {@value} */ 064 private static final String VERSION = "4.0.0.0 (2006/09/31)" ; 065 066 private static final long serialVersionUID = 400020060931L ; 067 068 private String key = null; 069 private String value = null; 070 071 /** 072 * Taglibの開始タグが見つかったときに処??doStartTag() ?オーバ?ライドします? 073 * 074 * @return 後続????( EVAL_BODY_BUFFERED ) 075 */ 076 @Override 077 public int doStartTag() { 078 return ( EVAL_BODY_BUFFERED ); // Body を評価する 079 } 080 081 /** 082 * Taglibのタグ本体を処??doAfterBody() ?オーバ?ライドします? 083 * 084 * @return 後続????(SKIP_BODY) 085 */ 086 @Override 087 public int doAfterBody() { 088 if( value == null || value.length() <= 0 ) { 089 value = getBodyString(); 090 } 091 092 return ( SKIP_BODY ); 093 } 094 095 /** 096 * Taglibの終?グが見つかったときに処??doEndTag() ?オーバ?ライドします? 097 * 098 * @return 後続???? 099 */ 100 @Override 101 public int doEndTag() { 102 debugPrint(); // 4.0.0 (2005/02/28) 103 ProcessTag process = (ProcessTag)findAncestorWithClass( this,ProcessTag.class ); 104 if( process == null ) { 105 // String errMsg = "<b>こ?タグは、ProcessTag の??(要?に記述してください?/b>"; 106 String errMsg = "<b>" + getTagName() + "タグは、ProcessTag の??(要?に記述してください?/b>"; 107 throw new HybsSystemException( errMsg ); 108 } 109 110 process.addParam( key,value ); 111 112 return(EVAL_PAGE); 113 } 114 115 /** 116 * タグリブオブジェクトをリリースします? 117 * キャ?ュされて再利用される?で、フィールド?初期設定を行います? 118 * 119 */ 120 @Override 121 protected void release2() { 122 super.release2(); 123 key = null; 124 value = null; 125 } 126 127 /** 128 * 【TAG】リクエスト情報 に登録するキーをセ?します? 129 * 130 * @og.tag リクエスト情報 に登録するキーをセ?します? 131 * 132 * @param key1 リクエスト情報に登録するキー 133 */ 134 public void setKey( final String key1 ) { 135 key = nval( getRequestParameter( key1 ),key ) ; 136 } 137 138 /** 139 * 【TAG】リクエスト情報 に登録する値をセ?します? 140 * 141 * @og.tag リクエスト情報 に登録する値をセ?します? 142 * 143 * @param val リクエスト情報に登録する値 144 */ 145 public void setValue( final String val ) { 146 value = nval( getRequestParameter( val ),value ); 147 } 148 149 /** 150 * シリアライズ用のカスタ?リアライズ書き込みメソ? 151 * 152 * @og.rev 4.0.0.0 (2006/09/31) 新規追? 153 * @serialData ?のオブジェクト?、シリアライズされません? 154 * 155 * @param strm ObjectOutputStreamオブジェク? 156 * @throws IOException 入出力エラーが発生した?? 157 */ 158 private void writeObject( final ObjectOutputStream strm ) throws IOException { 159 strm.defaultWriteObject(); 160 } 161 162 /** 163 * シリアライズ用のカスタ?リアライズ読み込みメソ? 164 * 165 * ここでは、transient 宣?れた?変数の??初期化が?なフィールド?み設定します? 166 * 167 * @og.rev 4.0.0.0 (2006/09/31) 新規追? 168 * @serialData ?のオブジェクト?、シリアライズされません? 169 * 170 * @param strm ObjectInputStreamオブジェク? 171 * @see #release2() 172 * @throws IOException シリアライズに関する入出力エラーが発生した?? 173 * @throws ClassNotFoundException クラスを見つけることができなかった?? 174 */ 175 private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException { 176 strm.defaultReadObject(); 177 } 178 179 /** 180 * こ?オブジェクト???表現を返します? 181 * 基本???目?使用します? 182 * 183 * @return こ?クラスの??表現 184 */ 185 @Override 186 public String toString() { 187 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 188 .println( "VERSION" ,VERSION ) 189 .println( "key" ,key ) 190 .println( "value" ,value ) 191 .fixForm().toString() ; 192 } 193 }