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 static org.opengion.fukurou.util.StringUtil.nval; 019 020import java.io.IOException; 021import java.io.ObjectInputStream; 022import java.io.ObjectOutputStream; 023 024import org.opengion.hayabusa.html.ViewAjaxTreeTableParam; 025 026/** 027 * viewタグの viewFormType が HTMLAjaxTreeTable の場合にパラメータを設定します。 028 * 029 * ツリービューを表示する、ViewForm_HTMLAjaxTreeTable クラスに対して、各種パラメータを 030 * 設定します。 031 * パラメータが設定されていない場合は、ViewAjaxTreeTableParam の初期値が使用されます。 032 * (パラメータを使用するには、viewタグのuseParam 属性をtrueに設定する必要があります。) 033 * 034 * ここで定義された子データを取得するためのJSPは、別に作成する必要があります。 035 * 036 * また、levelClmに設定されたカラムは、レベルと展開を表示するための画像イメージが表示されます。 037 * 展開レベルに応じて階層を視覚的に表示する場合は、levelClmに設定されたカラムのレンデラーを 038 * 定義して下さい。 039 * (例:LVLのコードリソースとして、1→- 2→-- 3→--- 等) 040 * 041 * 各属性は、{@XXXX} 変数が使用できます。 042 * これは、ServletRequest から、XXXX をキーに値を取り出し,この変数に割り当てます。 043 * つまり、このXXXXをキーにリクエストすれば、この変数に値をセットすることができます。 044 * 045 * http://localhost/query.jsp?KEY1=VLA1&KEY2=VAL2 046 * 047 * のようなリクエストで、{@KEY1} とすれば、 VAL1 がセットされます。 048 * 049 * @og.formSample 050 * ●形式:<og:ajaxTreeParam keys="YYY,XXX,ZZZ" childJsp="getChildTag.jsp" /> 051 * ●body:なし 052 * 053 * ●Tag定義: 054 * <og:ajaxTreeParam 055 * childSearchKeys 【TAG】子データを取得するためのJSPに渡す引数のカラム名をセットします(初期値:"") 056 * childSearchJsp 【TAG】子データを取得するためのJSPをセットします(初期値:"getChildTag.jsp") 057 * levelClm 【TAG】階層レベルとして処理(展開を制御するための画像イメージを表示)するカラム名をセットします(初期値:"LVL") 058 * imgCollapsed 【TAG】折りたたまれた状態を表現するための画像ファイル名をセットします(初期値:"/jsp/image/collapsed.gif") 059 * imgExpanded 【TAG】展開された状態を表現するための画像ファイル名をセットします(初期値:"/jsp/image/expanded.gif") 060 * imgNoSub 【TAG】展開後子データが存在しない状態を表現するための画像ファイル名をセットします(初期値:"/jsp/image/nosub.gif") 061 * expandAll 【TAG】初期状態で全展開を行うかを指定します(初期値:false=全展開しない) 062 * childViewStartNo 【TAG】子データを表示するためのStartNoを指定します(初期値:-1) 063 * expCtrlClm 【TAG】初期全展開した際に最下位の要素の状態(展開済 or 下位あり)を制御するためのカラムを指定します(初期値:EXPAND_CONTROL) 064 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 065 * /> 066 * 067 * ●使用例 068 * ViewFormTag の viewFormType が、HTMLAjaxTreeTable の場合に使用します。 069 * useParam 属性を設定しておかないと、使用されません。 070 * <og:view 071 * viewFormType = "HTMLAjaxTreeTable" 072 * command = "{@command}" 073 * startNo = "0" 074 * pageSize = "20" 075 * <b>useParam = "true"</b> 076 * > 077 * <og:ajaxTreeParam 078 * childSearchkeys = "YYY,XXX,ZZZ" 079 * childSearchJsp = "getChildTag.jsp" 080 * levelClm = "LVL" 081 * imgCollapsed = "collapsed.gif" 082 * imgExpanded = "expanded.gif" 083 * imgNoSub = "nosub.gif" 084 * /> 085 * </og:view > 086 * 087 * @og.group 画面表示 088 * 089 * @version 4.0 090 * @author Hiroki Nakamura 091 * @since JDK5.0, 092 */ 093public class ViewAjaxTreeParamTag extends ViewParamTag { 094 //* このプログラムのVERSION文字列を設定します。 {@value} */ 095 private static final String VERSION = "4.3.5.0 (2008/02/01)" ; 096 097 private static final long serialVersionUID = 435020080201L ; 098 099 /** 100 * 【TAG】子データを取得するためのJSPに渡す引数のカラム名をセットします(初期値:"")。 101 * 102 * @og.tag 103 * 子データを取得するためのJSPに渡す引数のカラム名をセットします。 104 * 親データから子データを展開する際に、ここで設定されたキーの値をDBTableModelから 105 * 取得し、子データ検索用のJSPに渡します。 106 * 子データ検索用のJSPでは通常のリクエスト変数({@カラム名})として値を取得することが可能です。 107 * 108 * @param keys 引数として渡すカラム名 109 */ 110 public void setChildSearchKeys( final String keys ) { 111 putParam( ViewAjaxTreeTableParam.CHILD_SEARCH_KEYS, 112 nval( getRequestParameter( keys ),"" ) ); 113 } 114 115 /** 116 * 【TAG】子データを取得するためのJSPをセットします(初期値:"getChildTag.jsp")。 117 * 118 * @og.tag 119 * 子データを取得するためのJSPをセットします。 120 * このJSPで子データを取得し、viewタグでHTML出力した結果をパースし、子データとして 121 * 親データの直下に要素を挿入します。 122 * 子データ検索用のJSPでは通常のリクエスト変数({@カラム名})として値を取得することが可能です。 123 * 124 * @param jsp JSPファイル名 125 */ 126 public void setChildSearchJsp( final String jsp ) { 127 putParam( ViewAjaxTreeTableParam.CHILD_SEARCH_JSP, 128 nval( getRequestParameter( jsp ),"getChildTag.jsp" ) ); 129 } 130 131 /** 132 * 【TAG】階層レベルとして処理(展開を制御するための画像イメージを表示)するカラム名をセットします(初期値:"LVL")。 133 * 134 * @og.tag 135 * 階層レベルとして処理(展開を制御するための画像イメージを表示)するカラム名をセットします。 136 * 子データを取得した際に、ここで指定されたカラムは、親レベルに対して自動的に+1されます。 137 * 138 * @param clm レベルカラム 139 */ 140 public void setLevelClm( final String clm ) { 141 putParam( ViewAjaxTreeTableParam.LVL_CLM_KEY, 142 nval( getRequestParameter( clm ),"LVL" ) ); 143 } 144 145 /** 146 * 【TAG】折りたたまれた状態を表現するための画像ファイル名をセットします(初期値:"/jsp/image/collapsed.gif")。 147 * 148 * @og.tag 149 * 折りたたまれた状態を表現するための画像ファイル名をセットします。 150 * 「折りたたまれた状態」とは、未展開の状態、及び展開後に折りたたんだ状態の両方を指します。 151 * 152 * @param img 画像ファイル名 153 */ 154 public void setImgCollapsed( final String img ) { 155 putParam( ViewAjaxTreeTableParam.IMG_COLLAPSED, 156 nval( getRequestParameter( img ),"collapsed.gif" ) ); 157 } 158 159 /** 160 * 【TAG】展開された状態を表現するための画像ファイル名をセットします(初期値:"/jsp/image/expanded.gif")。 161 * 162 * @og.tag 163 * 展開された状態を表現するための画像ファイル名をセットします。 164 * 165 * @param img 画像ファイル名 166 */ 167 public void setImgExpanded( final String img ) { 168 putParam( ViewAjaxTreeTableParam.IMG_EXPANDED, 169 nval( getRequestParameter( img ),"expanded.gif" ) ); 170 } 171 172 /** 173 * 【TAG】展開後子データが存在しない状態を表現するための画像ファイル名をセットします(初期値:"/jsp/image/nosub.gif")。 174 * 175 * @og.tag 176 * 展開後子データが存在しない状態を表現するための画像ファイル名をセットします。 177 * 178 * @param img 画像ファイル名 179 */ 180 public void setImgNoSub( final String img ) { 181 putParam( ViewAjaxTreeTableParam.IMG_NO_SUB, 182 nval( getRequestParameter( img ),"nosub.gif" ) ); 183 } 184 185 /** 186 * 【TAG】初期状態で全展開を行うかを指定します(初期値:false=全展開しない)。 187 * 188 * @og.tag 189 * 初期状態で全展開を行うかを指定します。DBTableModel上のデータが展開済みのデータ 190 * であると仮定し、全展開を行った状態で表示します。 191 * ※ この属性をtrueに指定しても子データ取得用のJSPが再帰的に呼び出される訳では 192 * ありません。子データの取得は、予めqueryで行っておく必要があります。 193 * 194 * @og.rev 4.3.3.0 (2008/10/01) 新規作成 195 * 196 * @param flg 初期状態で全展開を行うか 197 */ 198 public void setExpandAll( final String flg ) { 199 putParam( ViewAjaxTreeTableParam.EXPAND_ALL, 200 nval( getRequestParameter( flg ),"false" ) ); 201 } 202 203 /** 204 * 【TAG】子データを表示するためのStartNoを指定します(初期値:-1)。 205 * 206 * @og.tag 207 * 子データを取得するためのJSP内で使用します。 208 * 子データを取得し、元のDBTableModelにマージした後、子データのみを表示するため、 209 * ここでstartNoを指定して差分データを表示します。 210 * 211 * @og.rev 4.3.3.0 (2008/10/01) 新規作成 212 * 213 * @param no 子データを表示するためのStartNo 214 */ 215 public void setChildViewStartNo( final String no ) { 216 putParam( ViewAjaxTreeTableParam.CHILD_VIEW_START_NO, 217 nval( getRequestParameter( no ),"-1" ) ); 218 } 219 220 /** 221 * 【TAG】初期全展開した際に最下位の要素の状態(展開済 or 下位あり)を制御するためのカラムを指定します(初期値:EXPAND_CONTROL)。 222 * 223 * @og.tag 224 * 初期全展開した際に最下位の要素の状態(展開済 or 下位あり)を制御するためのカラムを指定します。 225 * ここで指定されたカラムの値により、全展開された結果の最下位の要素の状態指定することができます。 226 * この機能を利用することで、第3レベルまで存在するデータの内、第2レベルまでを展開しておく、 227 * ということを実現することができます。 228 * ここで指定したカラムが持つ値の意味は以下の通りです。 229 * '0' or 'false' 展開済 (初期値) 230 * '1' or 'true' 未展開 ※展開ボタンを押すことで更に下位展開が可能 231 * 232 * なお、この機能は、全展開時(expandAll="true")のみ有効であり、通常の第1レベル展開の場合は、 233 * このカラムは無視されます。 234 * 235 * @og.rev 4.3.5.0 (2008/02/01) 新規作成 236 * 237 * @param key 全展開時に最下位の要素の状態を制御するためのカラム 238 */ 239 public void setExpCtrlClm( final String key ) { 240 putParam( ViewAjaxTreeTableParam.EXPAND_CONTROL_CLM_KEY, 241 nval( getRequestParameter( key ),"EXPAND_CONTROL" ) ); 242 } 243 244 /** 245 * タグの名称を、返します。 246 * 自分自身のクラス名より、自動的に取り出せないため、このメソッドをオーバーライドします。 247 * 248 * @og.rev 4.3.1.0 (2008/09/03) 新規追加 249 * 250 * @return タグの名称 251 */ 252 @Override 253 protected String getTagName() { 254 return "ajaxTreeParam" ; 255 } 256 257 /** 258 * シリアライズ用のカスタムシリアライズ書き込みメソッド 259 * 260 * @og.rev 4.3.1.0 (2008/09/03) 新規追加 261 * @serialData 一部のオブジェクトは、シリアライズされません。 262 * 263 * @param strm ObjectOutputStreamオブジェクト 264 * @throws IOException 入出力エラーが発生した場合 265 */ 266 private void writeObject( final ObjectOutputStream strm ) throws IOException { 267 strm.defaultWriteObject(); 268 } 269 270 /** 271 * シリアライズ用のカスタムシリアライズ読み込みメソッド 272 * 273 * ここでは、transient 宣言された内部変数の内、初期化が必要なフィールドのみ設定します。 274 * 275 * @og.rev 4.3.1.0 (2008/09/03) 新規追加 276 * @serialData 一部のオブジェクトは、シリアライズされません。 277 * 278 * @param strm ObjectInputStreamオブジェクト 279 * @see #release2() 280 * @throws IOException シリアライズに関する入出力エラーが発生した場合 281 * @throws ClassNotFoundException クラスを見つけることができなかった場合 282 */ 283 private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException { 284 strm.defaultReadObject(); 285 } 286}