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.hayabusa.db.DBTableModel;
021 import org.opengion.hayabusa.db.DBColumn;
022 import org.opengion.hayabusa.db.Query;
023 import org.opengion.hayabusa.db.QueryFactory;
024 import org.opengion.fukurou.util.XHTMLTag;
025 import org.opengion.fukurou.util.Attributes;
026 import org.opengion.fukurou.db.Transaction;
027 import org.opengion.fukurou.db.TransactionReal;
028
029 import static org.opengion.fukurou.util.StringUtil.nval ;
030
031 import java.io.ObjectOutputStream;
032 import java.io.ObjectInputStream;
033 import java.io.IOException;
034
035 /**
036 * プルãƒ?‚¦ンメニューの選択é?目をSELECTæ–??結果から作æ?するタグですã?
037 *
038 * 基本çš?�«はã€?½‘ueryタグと同じ使ã�?–¹をしますã?
039 * こã?オブジェクトにã€?queryId を与えることにより、queryId に対応しã�?Queryオブジェクãƒ?
040 * (のサブクラスのオブジェクãƒ?が作æ?されますã?
041 * ここでæŒ?®šするSELECTæ–??、ã?SELECT KEY、LABEL1、LABEL2ã€?½¥?¥?¥ FROM TABLE ?¥?¥?¥』形å¼?ã‚?
042 * してã�?‚‹å¿?¦�がありますã?特別なケースとして、ã?SELECT KEY FROM TABLE ?¥?¥?¥』形式ã?場合ã?ã€?
043 * LABEL に KEY ã�?使用されますã?
044 * SystemData の USE_SQL_INJECTION_CHECK ã�?true かã?quotCheck 属æ?ã�?true の場合ã?ã€?
045 * ?³?±?¬インジェクション対策用のクォーãƒ?‚£ションチェãƒ?‚¯を行いますã?リクエスト引数に
046 * クォーãƒ?‚£ション(')が含まれると、エラーになりますã?
047 * 同様にUSE_XSS_CHECKがtrueかã?xssCheck属æ?がtrueの場合ã?ã€?
048 * クロスサイトススクリプティング(XSS)対策ã?ためless/greater than signのチェãƒ?‚¯を行いますã?
049 *
050 * ※ こã?タグは、Transaction タグの対象ですã?
051 *
052 * @og.formSample
053 * ●形式ï¼?
054 * <og:queryOption >
055 * SELECTæ–?
056 * </og:queryOption >
057 * ●body?šあã‚?EVAL_BODY_BUFFERED:BODYを評価しã?{@XXXX} を解析しまã�?
058 *
059 * ●Tag定義??
060 * <og:queryOption
061 * value 【TAG】Optionの初期値で選ばれる値を指定しまã�?
062 * separator 【TAG】è¤?•°のラベルを合成するときに使用するé ?›®区åˆ?‚Šæ–?—をセãƒ?ƒˆしまã�?初期値:スペã?ス)
063 * defaultVal 【TAG】value値がNULLの場合に使用されるå?期å?を設定しまã�?
064 * language 【TAG】タグå†?ƒ¨で使用するè¨?ªžコード[ja/en/zh/…]を指定しまã�?
065 * quotCheck 【TAG】リクエスト情報の クォーãƒ?‚£ション(') 存在チェãƒ?‚¯を実施するかどã�?�‹[true/false]を設定しまã�?(初期値:USE_SQL_INJECTION_CHECK[=true])
066 * dbid 【TAGã€?通常は使ã�?�¾せん)Queryオブジェクトを作æ?する時ã?DB接続IDを指定しまã�?
067 * addKey 【TAG】é?目がä¸?�¤ã�?�‘の場合ã??—ベルリソ?°?½に、キーæƒ??を追åŠ?�™るかどã�?�‹を指定しまã�?初期値:false)
068 * classUseNo 【TAG】オプションに追åŠ?�™ã‚?class 属æ?の カラãƒ?•ª号を指定しまã�?
069 * groupUseNo 【TAG】オプションのグループ化を行うカラãƒ?•ª号を指定しまã�?
070 * titleUseNo 【TAG】オプションに追åŠ?�™ã‚?title 属æ?の カラãƒ?•ª号を指定しまã�?
071 * xssCheck 【TAG】リクエスト情報の HTMLTag開å§?終äº?–‡å?><) 存在チェãƒ?‚¯を実施するかどã�?�‹[true/false]を設定しまã�?(初期値:USE_XSS_CHECK[=true])
072 * caseKey 【TAG】このタグ自体を利用するかどã�?�‹の条件キーを指定しまã�?初期値:null)
073 * caseVal 【TAG】このタグ自体を利用するかどã�?�‹の条件値を指定しまã�?初期値:null)
074 * caseNN 【TAG】指定ã?値がã?null/ゼロæ–?—å? でなã�??å�?Not Null=NN)は、このタグは使用されまã�?初期値:true)
075 * caseNull 【TAG】指定ã?値がã?null/ゼロæ–?—å? の場合ã?、このタグは使用されまã�?初期値:true)
076 * debug 【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
077 * > ... Body ...
078 * </og:queryOption>
079 *
080 * ●使用ä¾?
081 * <og:select name="CDC" >
082 * <og:queryOption>
083 * select NOSYN,NOSYN,NMSYN from DB01 ORDER BY 1
084 * </og:queryOption>
085 * </og:select>
086 *
087 * <og:select name="CDC" > 選択é?目のä¸?•ª上に空白をセãƒ?ƒˆしたã�?�¨きoptionタグをçµ?�ˆせることも可能ですã?
088 * <og:option lbl="" /> 初期値を設定したいときã?value属æ?を使ã�?�¾すã?
089 * <og:queryOption value="61200" separator=":" >
090 * select CDBK,CDBK,NMBK from DB02 ORDER BY 1
091 * </og:queryOption>
092 * </og:select>
093 *
094 * @og.group 選択データ制御
095 *
096 * @version 4.0
097 * @author Kazuhiko Hasegawa
098 * @since JDK5.0,
099 */
100 public class QueryOptionTag extends CommonTagSupport {
101 //* こã?プログラãƒ??VERSIONæ–?—å?を設定しますã? {@value} */
102 private static final String VERSION = "5.7.1.0 (2013/12/06)" ;
103
104 private static final long serialVersionUID = 571020131206L ;
105
106 private transient DBTableModel table = null;
107 private String selValue = null;
108 private String defaultVal = null;
109 // 4.0.0.0 (2007/10/10) dbid の初期値をã?"DEFAULT" から null に変更
110 // private String dbid = "DEFAULT";
111 private String dbid = null;
112 private String sql = null;
113 private String separator = " "; // é ?›®区åˆ?‚Šæ–??
114 private boolean quotCheck = HybsSystem.sysBool( "USE_SQL_INJECTION_CHECK" ); // 4.0.0 (2005/08/31)
115 private int classUseNo = -1; // 3.8.5.2 (2006/06/09) オプションに追åŠ?�™るクラス属æ?
116 private int groupUseNo = -1; // 3.8.5.2 (2006/06/09) キーブレイク時に追åŠ?�™るグループ文å?
117 private boolean addKey = false; // 4.0.0 (2006/11/15) é ?›®ä¸?�¤のときに?—ベルリソ?°?½表示時にキーも付加するã€?
118 private int titleUseNo = -1; // 4.3.8.0 (2009/08/01) オプションのtitle属æ?
119 private boolean xssCheck = HybsSystem.sysBool( "USE_XSS_CHECK" ); // 5.0.0.2 (2009/09/15)
120 private String rawSql = null; // 5.1.7.0 (2010/06/01) 動的プルãƒ?‚¦ン実è£?¦‹直ã�?
121
122 /**
123 * Taglibの開始タグが見つかったときに処ç�?�™ã‚?doStartTag() ã‚?オーバã?ライドしますã?
124 *
125 * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
126 *
127 * @return 後続å?ç�??æŒ?¤º( EVAL_BODY_BUFFERED )
128 */
129 @Override
130 public int doStartTag() {
131 // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
132 if( useTag() ) {
133 return( EVAL_BODY_BUFFERED ); // Body を評価するã€? extends BodyTagSupport æ™?
134 }
135 return ( SKIP_BODY ); // Body を評価しなã�?
136 }
137
138 /**
139 * Taglibのタグ本体を処ç�?�™ã‚?doAfterBody() ã‚?オーバã?ライドしますã?
140 *
141 * @og.rev 3.1.1.0 (2003/03/28) ボディのå†?®¹を取得するå?ç�?‚’、CommonTagSupport で行うã€?
142 * @og.rev 3.6.0.8 (2004/11/19) エラー発生時に確実にリリースされるよã�?�« try finally 追åŠ?
143 * @og.rev 3.7.1.0 (2005/04/26) DBTableModel がすでにセãƒ?ƒˆされてã�?‚‹場合ã?、SQL処ç�?¸�要ã?
144 * @og.rev 4.0.0.0 (2005/01/31) lang â‡?ResourceManager へ変更
145 * @og.rev 4.0.0.0 (2005/08/31) useQuotCheck() による?³?±?¬インジェクション対ç?
146 * @og.rev 3.8.6.3 (2006/11/30) SQL æ–??前後ã?スペã?スを取り除きますã?
147 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得ã?為,ApplicationInfoオブジェクトを設å®?
148 * @og.rev 4.3.6.0 (2009/04/01) EventColumn対å¿?
149 * @og.rev 5.0.0.5 (2009/08/28) XSS対ç?
150 * @og.rev 5.1.7.0 (2010/06/01) 動的プルãƒ?‚¦ン実è£?¦‹直ã�?
151 * @og.rev 5.1.9.0 (2010/08/01) TransactionTag 対応ã?上位に TransactionTag があれã?、そこからConnection をもらうã€?
152 * @og.rev 5.3.7.0 (2011/07/01) TransactionReal の引数変更
153 * @og.rev 5.3.8.0 (2011/08/01) Transaction発生ç®?‰€でclose()
154 *
155 * @return 後続å?ç�??æŒ?¤º(SKIP_BODY)
156 */
157 @Override
158 public int doAfterBody() {
159 // 3.7.1.0 (2005/04/26) DBTableModel がすでにセãƒ?ƒˆされてã�?‚‹場合ã?、SQL処ç�?¸�要ã?
160 if( table != null ) { return(SKIP_BODY); }
161
162 // 4.0.0 (2005/08/31) useQuotCheck() による?³?±?¬インジェクション対ç?
163 useQuotCheck( quotCheck );
164 // 5.0.0.2 (2009/09/15) XSS対ç?
165 useXssCheck( xssCheck );
166
167 sql = getBodyString().trim();
168 // String rawsql = getBodyRawString().trim(); // 4.3.6.0 生ã?SQLを保持
169 rawSql = getBodyRawString().trim();
170
171 // 4.3.6.0 (2009/04/01) セãƒ?‚·ョンへのSQLæ–?™»録
172 // 5.1.7.0 (2010/06/01) 動的プルãƒ?‚¦ン実è£?¦‹直ã�?
173 // String[] selectVals = getEventColumn(); // 親タグからイベントカラãƒ?¨定を取る
174 // if( selectVals[0] != null && selectVals[0].length() > 0 ){
175 // addEventColumnSQL( selectVals[1], rawsql );
176 // }
177
178 Query query = QueryFactory.newInstance(); // 4.0.0 (2005/01/31)
179 Transaction tran = null;
180 try {
181 // 5.1.9.0 (2010/08/01) TransactionTag 対å¿?
182 // final Transaction tran ;
183 TransactionTag tranTag = (TransactionTag)findAncestorWithClass( this,TransactionTag.class );
184 if( tranTag == null ) {
185 // tran = new TransactionReal( dbid,getApplicationInfo() );
186 tran = new TransactionReal( getApplicationInfo() ); // 5.3.7.0 (2011/07/01) 引数変更
187 }
188 else {
189 tran = tranTag.getTransaction();
190 }
191 query.setTransaction( dbid,tran ); // 5.1.9.0 (2010/08/01) TransactionTag 対å¿?
192
193 // query.setConnectionID( dbid );
194 query.setResourceManager( getResource() ); // 4.0.0 (2005/01/31)
195
196 query.setStatement( sql );
197 // query.setApplicationInfo( getApplicationInfo() ); // 3.8.7.0 (2006/12/15)
198 query.execute();
199
200 table = query.getDBTableModel();
201
202 // 4.0.0 (2005/11/30) 検索結果の件数をã?"DB.COUNT" キーでリクエストにセãƒ?ƒˆするã€?
203 }
204 finally {
205 // if( query != null ) { query.close(); }
206 QueryFactory.close( query );
207 if( tran != null ) { tran.close(); } // 5.3.8.0 (2011/08/01) Transaction発生ç®?‰€でclose()
208 }
209 return(SKIP_BODY);
210 }
211
212 /**
213 * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
214 *
215 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
216 * @og.rev 3.3.2.0 (2003/07/07) defaultVal 属æ?の追åŠ??
217 * @og.rev 3.5.4.0 (2003/11/25) selVal 属æ?を追åŠ??
218 * @og.rev 5.0.2.0 (2009/11/01) è¤?•°パラメーターの選択に対å¿?
219 * @og.rev 5.1.7.0 (2010/06/01) 動的プルãƒ?‚¦ン実è£?¦‹直ã�?
220 * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
221 * @og.rev 5.7.1.0 (2013/12/06) SelectTag â‡?OptionAncestorIF に変更して、DatalistTag にも対応ã?
222 *
223 * @return 後続å?ç�??æŒ?¤º
224 */
225 @Override
226 public int doEndTag() {
227 debugPrint(); // 4.0.0 (2005/02/28)
228 // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
229 if( useTag() ) {
230 // SelectTag select = (SelectTag)findAncestorWithClass( this,SelectTag.class );
231 OptionAncestorIF select = (OptionAncestorIF)findAncestorWithClass( this,OptionAncestorIF.class );
232 if( select == null ) {
233 // String errMsg = "こã?タグは、SelectTag のBODY に記述するå¿?¦�がありますã?";
234 String errMsg = "<b>" + getTagName() + "タグは、SelectTag またã?、DatalistTag のBODY に記述するå¿?¦�がありますã?</b>";
235 throw new HybsSystemException( errMsg );
236 }
237 String selVal = nval( select.getValue(),defaultVal ); // 3.5.4.0 (2003/11/25)
238 // selValue = nval( selValue,selVal ); // 3.5.4.0 (2003/11/25)
239 selValue = "|" + nval( selValue,selVal ) + "|"; // 5.0.2.0 (2009/11/01)
240 makeLabel( select );
241
242 // 5.1.7.0 (2010/06/01) 動的プルãƒ?‚¦ン実è£?¦‹直ã�?
243 select.setRawParam( rawSql );
244 }
245 return(EVAL_PAGE);
246 }
247
248 /**
249 * タグリブオブジェクトをリリースしますã?
250 * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
251 *
252 * @og.rev 2.0.0.4 (2002/09/27) カスタãƒ?‚¿グの release() メソãƒ?ƒ‰をã?追åŠ?
253 * @og.rev 3.0.1.0 (2003/03/03) セパレーターを指定できる様に変更ã€?
254 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
255 * @og.rev 3.3.2.0 (2003/07/07) defaultVal 属æ?の追åŠ??
256 * @og.rev 3.8.5.2 (2006/06/09) classUseNo , groupUseNo 属æ?の追åŠ??
257 * @og.rev 4.0.0.0 (2005/08/31) quotCheck , addKey 属æ?の追åŠ?
258 * @og.rev 4.0.0.0 (2007/10/10) dbid の初期値をã?"DEFAULT" から null に変更
259 * @og.rev 5.1.7.0 (2010/06/01) 動的プルãƒ?‚¦ン実è£?¦‹直ã�?
260 *
261 */
262 @Override
263 protected void release2() {
264 super.release2();
265 table = null;
266 selValue = null;
267 defaultVal = null;
268 // dbid = "DEFAULT";
269 dbid = null;
270 sql = null;
271 separator = " ";
272 classUseNo = -1; // 3.8.5.2 (2006/06/09) オプションに追åŠ?�™るクラス属æ?
273 groupUseNo = -1; // 3.8.5.2 (2006/06/09) キーブレイク時に追åŠ?�™るグループ文å?
274 quotCheck = HybsSystem.sysBool( "USE_SQL_INJECTION_CHECK" ); // 4.0.0 (2005/08/31)
275 addKey = false; // 4.0.0 (2006/11/15) é ?›®ä¸?�¤のときに?—ベルリソ?°?½表示時にキーも付加するã€?
276 titleUseNo = -1;
277 xssCheck = HybsSystem.sysBool( "USE_XSS_CHECK" ); // 5.0.0.2 (2009/09/15)
278 rawSql = null; // 5.1.7.0 (2010/06/01) 動的プルãƒ?‚¦ン実è£?¦‹直ã�?
279 }
280
281 /**
282 * DBTableModelをセãƒ?ƒˆしますã?
283 *
284 * サブクラスより、DBTableModelをセãƒ?ƒˆするのに使ã�?�¾すã?
285 *
286 * @og.rev 3.7.1.0 (2005/04/26) 新規追åŠ?
287 *
288 * @param table DBTableModelオブジェクãƒ?
289 */
290 protected void setTableModel( final DBTableModel table ) {
291 this.table = table ;
292 }
293
294 /**
295 * オプションを作æ?しますã?
296 *
297 * DBTableModel の?‘番目の値ã‚?"value" に、それ以降をæ–?—å?をé?結させて
298 * BODY属æ? に登録するOptionを作æ?しますã?
299 *
300 * @og.rev 3.0.1.0 (2003/03/03) 『SELECT KEY FROM TABLE ?¥?¥?¥』形式ã?場合ã?、LABEL に KEY を使用ã€?
301 * @og.rev 3.8.0.9 (2005/10/17) è¤?•°選択可能時に全選択を設定するã?
302 * @og.rev 3.8.5.2 (2006/06/09) classUseNo 属æ?と groupUseNo 属æ?を追åŠ?
303 * @og.rev 3.8.9.2 (2007/07/28) グループと、クラスの設定方法ã?バグ修正
304 * @og.rev 4.3.8.0 (2009/08/01) titleUseNo属æ?追åŠ?
305 * @og.rev 5.0.2.0 (2009/11/01) è¤?•°パラメーターの選択に対å¿?
306 * @og.rev 5.7.1.0 (2013/12/06) SelectTag â‡?OptionAncestorIF に変更して、DatalistTag にも対応ã?
307 *
308 * @param select SelectTagオブジェクãƒ?
309 */
310 // private void makeLabel( final SelectTag select ) {
311 private void makeLabel( final OptionAncestorIF select ) {
312 boolean multipleAll = select.isMultipleAll(); // 3.8.0.9 (2005/10/17)
313 int rowCnt = table.getRowCount(); // 3.5.5.7 (2004/05/10)
314
315 String bkGroupKey = "";
316 String grpLabel ;
317 for( int row=0; row<rowCnt; row++ ) {
318 // 3.8.5.2 (2006/06/09) groupUseNo 属æ?
319 if( groupUseNo >= 0 ) {
320 String groupKey = table.getValue( row,groupUseNo );
321 grpLabel = getRendererValue( row,groupUseNo );
322 if( !bkGroupKey.equals( groupKey ) ) { // キーブレイク
323 // 3.8.9.2 (2007/07/28) グループと、クラスの設定方法ã?バグ修正
324 // bkGroupKey = groupKey;
325 // if( row != 0 ) { select.addOption( "</optgroup>" ); }
326 // select.addOption( "<optgroup label=\"" + grpLabel + "\">" );
327
328 if( ! "".equals( bkGroupKey ) ) {
329 select.addOption( "</optgroup>" );
330 }
331 if( ! "".equals( groupKey ) ) {
332 select.addOption( "<optgroup label=\"" + grpLabel + "\">" );
333 }
334 bkGroupKey = groupKey;
335 }
336 }
337
338 Attributes attri = new Attributes();
339 String value = table.getValue( row,0 );
340 attri.set( "value", value );
341
342 // 5.0.2.0 (2009/11/01)
343 // if( ( selValue != null && selValue.equals( value ) ) || multipleAll ) {
344 if( ( selValue != null && selValue.length() > 0 && selValue.indexOf( "|" + value + "|" ) >= 0 ) || multipleAll ) {
345 attri.set( "selected", "selected" );
346 }
347
348 // 3.8.5.2 (2006/06/09) classUseNo 属æ?
349 if( classUseNo >= 0 ) {
350 attri.add( "class", table.getValue( row,classUseNo ) );
351 }
352
353 StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
354 boolean titleFlg = false; // 4.3.8.0 (2009/08/01) title属æ?を付けるかどã�?�‹
355 if( table.getColumnCount() == 1 ) {
356 // é ?›®がä¸?�¤の queryOption では、ラベルリソースが使用されますã?
357 if( addKey ) { buf.append( value ).append( ":" ); }
358 buf.append( getResource().getLabel( value ) );
359
360 // 4.3.8.0 (2009/08/01) titleUseNo 属æ? セãƒ?ƒˆされてã�?‚‹場合かつラベルと異なるå?合ã?title属æ?に追åŠ?
361 if( titleUseNo >= 0 && !getResource().getLabel( value ).equals( table.getValue( row,titleUseNo ) )) {
362 titleFlg = true;
363 }
364 }
365 else {
366 // if( groupUseNo >= 0 ) {
367 // buf.append( grpLabel );
368 // buf.append( separator );
369 // }
370 String label = getRendererValue( row,1 );
371 buf.append( label );
372 // attri.set( "label", label );
373 for( int clm=2; clm<table.getColumnCount(); clm++ ) {
374 // 4.3.8.0 (2009/08/01) titleUseNo追åŠ?
375 // if( clm == groupUseNo || clm == classUseNo ) { continue; }
376 if( clm == groupUseNo || clm == classUseNo || clm==titleUseNo) { continue; }
377 buf.append( separator );
378 buf.append( getRendererValue( row,clm ) );
379 }
380
381 // 4.3.8.0 (2009/08/01) titleUseNo 属æ? セãƒ?ƒˆされてã�?‚‹場合かつラベルと異なるå?合ã?title属æ?に追åŠ?
382 if( titleUseNo >= 0 && !label.equals( table.getValue( row,titleUseNo ) )) {
383 titleFlg = true;
384 }
385 }
386
387 // 4.3.7.2 (2009/06/22) タイトル属æ?セãƒ?ƒˆ
388 if( titleFlg ){
389 attri.add( "title", table.getValue( row,titleUseNo ) );
390 }
391
392 attri.set( "body", buf.toString() );
393 select.addOption( XHTMLTag.option( attri ) );
394 }
395 // if( groupUseNo >= 0 && "".equals( bkGroupKey ) ) {
396 if( groupUseNo >= 0 && ! "".equals( bkGroupKey ) ) { // 3.8.9.2 (2007/07/28)
397 select.addOption( "</optgroup>" );
398 }
399 }
400
401 /**
402 * 【TAG】Optionの初期値で選ばれる値を指定しますã?
403 *
404 * @og.tag Optionの初期値で選ばれる値を指定しますã?
405 *
406 * @param val Optionの初期値で選ばれる値
407 */
408 public void setValue( final String val ) {
409 selValue = getRequestParameter( val );
410 }
411
412 /**
413 * 【TAG】value値がNULLの場合に使用されるå?期å?を設定しますã?
414 *
415 * @og.tag
416 * value値がNULLの場合に、この初期値をセãƒ?ƒˆしますã?
417 *
418 * @og.rev 3.3.2.0 (2003/07/07) defaultVal 属æ?の追åŠ??(新規作æ?)
419 *
420 * @param val 初期値
421 */
422 public void setDefaultVal( final String val ) {
423 defaultVal = getRequestParameter( val );
424 }
425
426 /**
427 * 【TAG】è¤?•°のラベルを合成するときに使用するé ?›®区åˆ?‚Šæ–?—をセãƒ?ƒˆしまã�?初期値:スペã?ス)ã€?
428 *
429 * @og.tag
430 * 初期値は、スペã?スですã?
431 *
432 * @og.rev 3.0.1.0 (2003/03/03) セパレーターを指定できる様に変更ã€?
433 *
434 * @param sep é ?›®区åˆ?‚Šæ–??
435 */
436 public void setSeparator( final String sep ) {
437 separator = nval( getRequestParameter( sep ),separator );
438 }
439
440 /**
441 * 【TAG】オプションに追åŠ?�™ã‚?class 属æ?の カラãƒ?•ª号を指定しますã?
442 *
443 * @og.tag
444 * オプションは、データベã?スを検索して作æ?されますが、そのSQLæ–??カラãƒ?ƒ…報ã‚?
445 * 使用して オプションに class 属æ?を追åŠ?�—ますã?
446 * å�?‚ªプションに色をつける場合ã?、この class 属æ?に対応すã‚?CSS ファイルを用意しますã?
447 * ここでは、class 属æ?に使用する SQLæ–?? カラãƒ?•ª号( 先é?ã�?0 ) を指定しますã?
448 * 通常、カラãƒ?•ª号=0 は キーæƒ??ã€?1 はラベルæƒ?? ですã?2 ã�?3 を指定しますã?
449 * 初期値は、使用しなã�?-1)ですã?
450 *
451 * @og.rev 3.8.5.2 (2006/06/09) 新規追åŠ?
452 *
453 * @param no オプションに追åŠ?�™るクラス属æ?
454 */
455 public void setClassUseNo( final String no ) {
456 classUseNo = nval( getRequestParameter( no ),classUseNo );
457 if( classUseNo == 0 || classUseNo == 1 ) {
458 String errMsg = "通常、カラãƒ?•ª号=0 は キーæƒ??ã€?1 はラベルæƒ?? ですã?2 ã�?3 を指定して下さã�??";
459 throw new HybsSystemException( errMsg );
460 }
461 }
462
463 /**
464 * 【TAG】オプションのグループ化を行うカラãƒ?•ª号を指定しますã?
465 *
466 * @og.tag
467 * オプションは、データベã?スを検索して作æ?されますが、そのSQLæ–??カラãƒ?ƒ…報ã‚?
468 * 使用して オプションをグループ化しますã?グループ化は optgroup要ç´?‚’ブレイク時に
469 * 出力する事で対応しますã?
470 * ここでは、グループ化に使用する SQLæ–?? カラãƒ?•ª号( 先é?ã�?0 ) を指定しますã?
471 * 通常、カラãƒ?•ª号=0 は キーæƒ??ã€?1 はラベルæƒ?? ですã?2 ã�?3 を指定しますã?
472 * 初期値は、使用しなã�?-1)ですã?
473 *
474 * @og.rev 3.8.5.2 (2006/06/09) 新規追åŠ?
475 *
476 * @param no キーブレイク時に追åŠ?�™るグループ文å?
477 */
478 public void setGroupUseNo( final String no ) {
479 groupUseNo = nval( getRequestParameter( no ),groupUseNo );
480 if( groupUseNo == 0 || groupUseNo == 1 ) {
481 String errMsg = "通常、カラãƒ?•ª号=0 は キーæƒ??ã€?1 はラベルæƒ?? ですã?2 ã�?3 を指定して下さã�??";
482 throw new HybsSystemException( errMsg );
483 }
484 }
485
486 /**
487 * 【TAG】リクエスト情報の クォーãƒ?‚£ション(') 存在チェãƒ?‚¯を実施するかどã�?�‹[true/false]を設定しまã�?
488 * (初期値:USE_SQL_INJECTION_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_SQL_INJECTION_CHECK}])ã€?
489 *
490 * @og.tag
491 * ?³?±?¬インジェクション対策ã?ä¸?�¤として、暫定的ではありますが、SQLのパラメータに
492 * 渡す文字å?にクォーãƒ?‚£ション(') を許さなã�?¨定にすれば、ある程度は防止できますã?
493 * 数字タイプã?引数にはã€?or 5=5 などのクォーãƒ?‚£ションを使用しなã�?‚³ードを埋めてもã?
494 * 数字チェãƒ?‚¯で検å?可能ですã?æ–?—タイプã?場合ã?、å¿?�š (')をã?ずしてã€?
495 * ' or 'A' like 'A のような形式になる為ã€?')チェãƒ?‚¯ã�?�‘でも有効ですã?
496 * (') が含まれてã�?�Ÿエラーにする(true)?�かノã?チェãƒ?‚¯ã�?false)を指定しますã?
497 * (初期値:シスãƒ?ƒ 定数のUSE_SQL_INJECTION_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_SQL_INJECTION_CHECK}])ã€?
498 *
499 * @og.rev 4.0.0.0 (2005/08/31) 新規追åŠ?
500 *
501 * @param flag クォーãƒ?‚£ションチェãƒ?‚¯ [true:する/それ以å¤?しない]
502 * @see org.opengion.hayabusa.common.SystemData#USE_SQL_INJECTION_CHECK
503 */
504 public void setQuotCheck( final String flag ) {
505 quotCheck = nval( getRequestParameter( flag ),quotCheck );
506 }
507
508 /**
509 * 【TAGã€?通常は使ã�?�¾せん)Queryオブジェクトを作æ?する時ã?DB接続IDを指定しますã?
510 *
511 * @og.tag
512 * Queryオブジェクトを作æ?する時ã?DB接続IDを指定しますã?
513 * これは、シスãƒ?ƒ リソースで、DEFAULT_DB_URL 等でæŒ?®šしてã�?‚‹ ãƒ??タベã?ス接続å?
514 * æƒ??に、XX_DB_URL を定義することでã€?dbid="XX" とすると、この 接続å?を使用して
515 * ãƒ??タベã?スにアクセスできますã?
516 *
517 * @param id ãƒ??タベã?ス接続ID
518 */
519 public void setDbid( final String id ) {
520 dbid = nval( getRequestParameter( id ),dbid );
521 }
522
523 /**
524 * 【TAG】é?目がä¸?�¤ã�?�‘の場合ã??—ベルリソ?°?½に、キーæƒ??を追åŠ?�™るかどã�?�‹を指定しまã�?初期値:false)ã€?
525 *
526 * @og.tag
527 * Queryオブジェクトã?é ?›®がä¸?�¤の場合ã??—ベル部にはã€?¾—ベルリソ?°?½を使用しますã?
528 * こã?時ã??—ベル無しã?場合ã?、キーが表示されますがã€?¾—ベルありã?場合ã?、キーは表示されã�?
529 * ?—ベルã?み表示されますã?
530 * 都合によっては、キーも表示したã�??合がありますã?で、その様なケースではã€?
531 * addKey = "true を設定する事で、キー:?—ベï¾?のセãƒ?ƒˆをラベルとして扱ã�?�¾すã?
532 * 初期値はfalse(キーは付加しなã�?ですã?
533 *
534 * @param id ãƒ??タベã?ス接続ID
535 */
536 public void setAddKey( final String id ) {
537 addKey = nval( getRequestParameter( id ),addKey );
538 }
539
540 /**
541 * 【TAG】リクエスト情報の HTMLTag開å§?終äº?–‡å?><) 存在チェãƒ?‚¯を実施するかどã�?�‹[true/false]を設定しまã�?
542 * (初期値:USE_XSS_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_XSS_CHECK}])ã€?
543 *
544 * @og.tag
545 * クロスサイトスクリプティング(XSS)対策ã?ä¸?’°としてless/greater than signにつã�?�¦のチェãƒ?‚¯を行いますã?
546 * (><) が含まれてã�?�Ÿエラーにする(true)?�かノã?チェãƒ?‚¯ã�?false)を指定しますã?
547 * (初期値:シスãƒ?ƒ 定数のUSE_XSS_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_XSS_CHECK}])ã€?
548 *
549 * @og.rev 5.0.0.2 (2009/09/15) 新規追åŠ?
550 *
551 * @param flag XSSチェãƒ?‚¯ [true:する/false:しない]
552 * @see org.opengion.hayabusa.common.SystemData#USE_XSS_CHECK
553 */
554 public void setXssCheck( final String flag ) {
555 xssCheck = nval( getRequestParameter( flag ),xssCheck );
556 }
557
558 /**
559 * row行,columåˆ?のãƒ??タの値を返しますã?
560 *
561 * これは、データの値そã?もã?ではなくã?そã?値のラベルæ–?—を返しますã?
562 *
563 * @param row 行番号
564 * @param column カラãƒ?•ª号
565 *
566 * @return row行,columåˆ?のãƒ??タの値
567 */
568 private String getRendererValue( final int row,final int column ) {
569 String val = table.getValue( row,column );
570 DBColumn clm = table.getDBColumn( column );
571 return clm.getRendererValue( val );
572 }
573
574 /**
575 * 【TAG】オプションに追åŠ?�™ã‚?title 属æ?の カラãƒ?•ª号を指定しますã?
576 *
577 * @og.tag
578 * オプションは、データベã?スを検索して作æ?されますが、そのSQLæ–??カラãƒ?ƒ…報ã‚?
579 * 使用して オプションに title 属æ?を追åŠ?�—ますã?
580 * title属æ?はマウスオーバã?時にãƒ??ルチップとして表示されるためã?
581 * プルãƒ?‚¦ンの横å¹?‚’短くしたい場合に有効ですã?
582 * 通常、カラãƒ?•ª号=0 は キーæƒ??ã€?1 はラベルæƒ?? ですã?2 ã�?3 を指定しますã?
583 * 初期値は、使用しなã�?-1)ですã?
584 *
585 * @og.rev 4.3.8.0 (2009/08/01) 新規追åŠ?
586 *
587 * @param no オプションに追åŠ?�™るtitle属æ?
588 */
589 public void setTitleUseNo( final String no ) {
590 titleUseNo = nval( getRequestParameter( no ),titleUseNo );
591 if( titleUseNo == 0 || titleUseNo == 1 ) {
592 String errMsg = "通常、カラãƒ?•ª号=0 は キーæƒ??ã€?1 はラベルæƒ?? ですã?2 ã�?3 を指定して下さã�??";
593 throw new HybsSystemException( errMsg );
594 }
595 }
596
597 /**
598 * シリアライズ用のカスタãƒ?‚·リアライズ書き込みメソãƒ?ƒ‰
599 *
600 * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
601 * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
602 *
603 * @param strm ObjectOutputStreamオブジェクãƒ?
604 * @throws IOException 入出力エラーが発生したå?å�?
605 */
606 private void writeObject( final ObjectOutputStream strm ) throws IOException {
607 strm.defaultWriteObject();
608 }
609
610 /**
611 * シリアライズ用のカスタãƒ?‚·リアライズ読み込みメソãƒ?ƒ‰
612 *
613 * ここでは、transient 宣è¨?�•れたå†?ƒ¨変数のå†??初期化がå¿?¦�なフィールドã?み設定しますã?
614 *
615 * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
616 * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
617 *
618 * @param strm ObjectInputStreamオブジェクãƒ?
619 * @see #release2()
620 * @throws IOException シリアライズに関する入出力エラーが発生したå?å�?
621 * @throws ClassNotFoundException クラスを見つけることができなかったå?å�?
622 */
623 private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
624 strm.defaultReadObject();
625 }
626
627 // /**
628 // * 親のog:selectタグのnameとeventColumn設定を返しますã?
629 // *
630 // * @og.rev 4.3.6.0 (2009/04/01)
631 // *
632 // */
633 // private String[] getEventColumn(){
634 // SelectTag seltag = (SelectTag)findAncestorWithClass(this,SelectTag.class);
635 // String[] selectVal = new String[2];
636 // selectVal[0] = seltag.getEventColumn();
637 // selectVal[1] = seltag.get("name");
638 // return selectVal;
639 // }
640
641 /**
642 * こã?オブジェクトã?æ–?—å?表現を返しますã?
643 * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
644 *
645 * @return こã?クラスのæ–?—å?表現
646 */
647 @Override
648 public String toString() {
649 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
650 .println( "VERSION" ,VERSION )
651 .println( "selValue" ,selValue )
652 .println( "defaultVal" ,defaultVal )
653 .println( "dbid" ,dbid )
654 .println( "sql" ,sql )
655 .println( "separator" ,separator )
656 .println( "quotCheck" ,quotCheck )
657 .println( "Other..." ,getAttributes().getAttribute() )
658 .fixForm().toString() ;
659 }
660 }