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 */ 016package org.opengion.hayabusa.taglib; 017 018import org.opengion.hayabusa.common.HybsSystemException; 019import org.opengion.fukurou.util.ToString; // 6.1.1.0 (2015/01/17) 020 021import static org.opengion.fukurou.util.StringUtil.nval ; 022 023/** 024 * ProcessTag に対して、引数(パラメータ)を渡す、入れ子の子クラスです。 025 * 026 * @og.formSample 027 * ●形式:<og:param key="ZZZ" value="AAA,BBB" /> 028 * ●body:あり(EVAL_BODY_BUFFERED:BODYを評価し、{@XXXX} を解析します) 029 * 030 * ●Tag定義: 031 * <og:param 032 * key ○【TAG】リクエスト情報 に登録するキーをセットします(必須)。 033 * value 【TAG】リクエスト情報 に登録する値をセットします 034 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 035 * > ... Body ... 036 * </og:param> 037 * 038 * ●使用例 039 * 一般的な変数の渡し方 040 * <og:process ・・・・・ > 041 * <og:param key="AAA" value="111" /> 042 * <og:param key="BBB" value="222" /> 043 * <og:param key="CCC" value="333" /> 044 * <og:param key="DDD" value="444" /> 045 * </og:process > 046 * 047 * BODY 部に記述した変数の渡し方 048 * <og:process ・・・・・ > 049 * <og:param key="SQL" > 050 * SELECT * FROM DUAL 051 * </og:param> 052 * </og:process > 053 * 054 * @og.group 画面表示 055 * 056 * @version 4.0 057 * @author Kazuhiko Hasegawa 058 * @since JDK5.0, 059 */ 060public class ParamTag extends CommonTagSupport { 061 /** このプログラムのVERSION文字列を設定します。 {@value} */ 062 private static final String VERSION = "6.4.2.0 (2016/01/29)" ; 063 private static final long serialVersionUID = 642020160129L ; 064 065 private String key ; 066 private String value ; 067 068 /** 069 * デフォルトコンストラクター 070 * 071 * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor. 072 */ 073 public ParamTag() { super(); } // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。 074 075 /** 076 * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。 077 * 078 * @return 後続処理の指示( EVAL_BODY_BUFFERED ) 079 */ 080 @Override 081 public int doStartTag() { 082 return EVAL_BODY_BUFFERED ; // Body を評価する 083 } 084 085 /** 086 * Taglibのタグ本体を処理する doAfterBody() を オーバーライドします。 087 * 088 * @return 後続処理の指示(SKIP_BODY) 089 */ 090 @Override 091 public int doAfterBody() { 092 if( value == null || value.length() <= 0 ) { 093 value = getBodyString(); 094 } 095 096 return SKIP_BODY ; 097 } 098 099 /** 100 * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。 101 * 102 * @return 後続処理の指示 103 */ 104 @Override 105 public int doEndTag() { 106 debugPrint(); // 4.0.0 (2005/02/28) 107 final ProcessTag process = (ProcessTag)findAncestorWithClass( this,ProcessTag.class ); 108 if( process == null ) { 109 final String errMsg = "<b>" + getTagName() + "タグは、ProcessTag の内側(要素)に記述してください。</b>"; 110 throw new HybsSystemException( errMsg ); 111 } 112 113 process.addParam( key,value ); 114 115 return EVAL_PAGE ; 116 } 117 118 /** 119 * タグリブオブジェクトをリリースします。 120 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 121 * 122 */ 123 @Override 124 protected void release2() { 125 super.release2(); 126 key = null; 127 value = null; 128 } 129 130 /** 131 * 【TAG】リクエスト情報 に登録するキーをセットします。 132 * 133 * @og.tag リクエスト情報 に登録するキーをセットします。 134 * 135 * @param key1 リクエスト情報に登録するキー 136 */ 137 public void setKey( final String key1 ) { 138 key = nval( getRequestParameter( key1 ),key ) ; 139 } 140 141 /** 142 * 【TAG】リクエスト情報 に登録する値をセットします。 143 * 144 * @og.tag リクエスト情報 に登録する値をセットします。 145 * 146 * @param val リクエスト情報に登録する値 147 */ 148 public void setValue( final String val ) { 149 value = nval( getRequestParameter( val ),value ); 150 } 151 152 /** 153 * このオブジェクトの文字列表現を返します。 154 * 基本的にデバッグ目的に使用します。 155 * 156 * @return このクラスの文字列表現 157 * @og.rtnNotNull 158 */ 159 @Override 160 public String toString() { 161 return ToString.title( this.getClass().getName() ) 162 .println( "VERSION" ,VERSION ) 163 .println( "key" ,key ) 164 .println( "value" ,value ) 165 .fixForm().toString() ; 166 } 167}