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 static org.opengion.fukurou.util.StringUtil.nval;
019
020 import java.io.File;
021 import java.io.IOException;
022 import java.io.ObjectInputStream;
023 import java.io.ObjectOutputStream;
024 import java.util.Locale;
025 import java.util.Map;
026 import java.util.Map.Entry;
027 import java.util.Arrays;
028
029 import org.opengion.fukurou.business.ArrayTableModel;
030 import org.opengion.fukurou.business.BizLogicHelper;
031 import org.opengion.fukurou.db.Transaction;
032 import org.opengion.fukurou.db.TransactionReal;
033 import org.opengion.fukurou.util.ErrMsg;
034 import org.opengion.fukurou.util.ErrorMessage;
035 import org.opengion.fukurou.util.HybsLoader;
036 import org.opengion.fukurou.util.HybsLoaderConfig;
037 import org.opengion.fukurou.util.HybsLoaderFactory;
038 import org.opengion.fukurou.util.StringUtil;
039 import org.opengion.hayabusa.common.HybsSystem;
040 import org.opengion.hayabusa.common.HybsSystemException;
041 import org.opengion.hayabusa.db.DBTableModel;
042
043 /**
044 * 業務ロジãƒ?‚¯を呼び出すためã?タグですã?
045 *
046 * logics属æ?に呼び出す業務ロジãƒ?‚¯のクラス名を記述しますã?
047 * こã?タグでは、è¤?•°の業務ロジãƒ?‚¯ã‚?度に呼び出すことができã?
048 * DB接続ã?commit,rollbackはä¸?•ªæœ?¾Œにã€?度のみ実行されますã?
049 * å�?¥務ロジãƒ?‚¯は、記述したé ?•ªに呼び出されますã?
050 *
051 * 業務ロジãƒ?‚¯は、{@link org.opengion.fukurou.business.BizLogicHelper}の
052 * 実è£?‚¯ラス、またã?、この実è£?‚¯ラスを継承したサブクラスであるå¿?¦�がありますã?
053 *
054 * 業務ロジãƒ?‚¯クラスにつã�?�¦は、ã?ãƒ?ƒˆãƒ??ロイ機è?により、動çš?‚³ンパイル、クラスロードが
055 * 行われますã?
056 *
057 * 業務ロジãƒ?‚¯のソースãƒ?‚£レクトリは、シスãƒ?ƒ リソースの BIZLOGIC_SRC_PATH で定義されますã?
058 * またã?同様にクラスãƒ?‚£レクトリは、シスãƒ?ƒ リソースの BIZLOGIC_CLASS_PATH で定義されますã?
059 * さらに、シスãƒ?ƒ リソースの BIZLOGIC_HOTDEPLOY ã‚?false に設定することで、動çš?‚³ンパイル
060 * 、クラスロードを行わなくすることもできますã?
061 * こã?場合ã?予めコンパイルされたクラスをã?初回呼び出し時に1回ã?みロードされますã?
062 *
063 * SystemData の USE_SQL_INJECTION_CHECK ã�?true かã?quotCheck 属æ?ã�?true の場合ã?ã€?
064 * ?³?±?¬インジェクション対策用のクォーãƒ?‚£ションチェãƒ?‚¯を行いますã?リクエスト引数に
065 * クォーãƒ?‚£ション(')が含まれると、エラーになりますã?
066 * 同様にUSE_XSS_CHECKがtrueかã?xssCheck属æ?がtrueの場合ã?ã€?
067 * クロスサイトススクリプティング(XSS)対策ã?ためless/greater than signのチェãƒ?‚¯を行いますã?
068 *
069 * ※ こã?タグは、Transaction タグの対象ですã?
070 *
071 * @og.formSample
072 * ●形式ï¼?
073 * ・<og:bizLog
074 * logics = "業務ロジãƒ?‚¯のクラスå�?
075 * command = "ENTRY"
076 * scope = "session"
077 * dbid = "DEFAULT"
078 * tableId = "DEFAULT"
079 * selectedAll = "false"
080 * modifyType = "A"
081 * keys = "SYSTEM_ID"
082 * vals = "{@SYSTEM_ID}"
083 * stopError = "true"
084 * quotCheck = "true"
085 * xssCheck = "true"
086 * debug = "false"
087 * />
088 * ●body?šなã�?
089 *
090 * ●Tag定義??
091 * <og:bizLogic
092 * logics ○ã?TAG】実行する業務ロジãƒ?‚¯名をæŒ?®šしまã�?å¿??)ã€?
093 * command 【TAG】コマンドをセãƒ?ƒˆしまã�?初期値:ENTRY)
094 * scope 【TAG】キャãƒ?‚·ュする場合ã?スコープ[request/page/session/applicaton]を指定しまã�?初期値:session)
095 * dbid 【TAGã€?通常は使ã�?�¾せん)Queryオブジェクトを作æ?する時ã?DB接続IDを指定しまã�?
096 * tableId 【TAGã€?通常は使ã�?�¾せん)結果のDBTableModelをã?sessionに登録するときã?キーを指定しまã�?
097 * selectedAll 【TAG】データをå?件選択済みとして処ç�?�™るかどã�?�‹[true/false]を指定しまã�?初期値:false)
098 * modifyType 【TAG】DB検索時ã? モãƒ?‚£ファイタイプをæŒ?®šします[A:追åŠ?C:更新/D:削除]
099 * keys 【TAG】リンク先に渡すキーをCSV形式でè¤?•°æŒ?®šしまã�?
100 * vals 【TAG】リンク先に渡すå?をCSV形式でè¤?•°æŒ?®šしまã�?
101 * stopError 【TAG】å?ç�?‚¨ラーの時に処ç�?‚’中止するかどã�?�‹[true/false]を設定しまã�?初期値:true)
102 * quotCheck 【TAG】リクエスト情報の クォーãƒ?‚£ション(') 存在チェãƒ?‚¯を実施するかどã�?�‹[true/false]を設定しまã�?(初期値:USE_SQL_INJECTION_CHECK[=true])
103 * xssCheck 【TAG】リクエスト情報の HTMLTag開å§?終äº?–‡å?><) 存在チェãƒ?‚¯を実施するかどã�?�‹[true/false]を設定しまã�?(初期値:USE_XSS_CHECK[=true])
104 * multi 【TAG】vals属æ?でパラメーターを取得する際、è¤?•°件存在する場合に、å?をé?結するかどã�?�‹を指定しまã�?初期値:false)
105 * debug 【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
106 * />
107 *
108 * ●使用ä¾?
109 * <!-- 業務ロジãƒ?‚¯の呼び出しを行いまã�?-->
110 * <og:bizLogic logics="org.opengion.logic.gf9110.BizLogic_0001" keys="SYSTEM_ID" vals="{@MEM.SYSTEM_ID}" />
111 *
112 * @og.rev 5.1.1.0 (2009/12/01) 新規作æ?
113 * @og.group 業務ロジãƒ?‚¯
114 *
115 * @version 5.0
116 * @author Hiroki Nakamura
117 * @since JDK1.6,
118 */
119 public class BizLogicTag extends CommonTagSupport {
120 //* こã?プログラãƒ??VERSIONæ–?—å?を設定しますã? {@value} */
121 private static final String VERSION = "567020130727" ;
122 private static final long serialVersionUID = 567020130727L ;
123
124 /** command 引数に渡す事ã?出来ã‚?コマンãƒ? エントリー {@value} */
125 // private static final String CMD_ENTRY = "ENTRY" ;
126 public static final String CMD_ENTRY = "ENTRY" ; // 5.1.9.0 (2010/08/01)
127 // private static final String COMMAND_LIST = CMD_ENTRY;
128 private static final String ERR_MSG_ID = HybsSystem.ERR_MSG_KEY;
129
130 private String command = CMD_ENTRY;
131 private String[] logics = null;
132 private String dbid = null ;
133 private transient DBTableModel table = null;
134 private String tableId = HybsSystem.TBL_MDL_KEY;
135 private boolean selectedAll = false;
136 private String modifyType = null;
137 private String[] keys = null;
138 private String[] vals = null;
139
140 private boolean stopError = true;
141 private boolean quotCheck = HybsSystem.sysBool( "USE_SQL_INJECTION_CHECK" ); // 4.0.0 (2005/08/31)
142 private boolean xssCheck = HybsSystem.sysBool( "USE_XSS_CHECK" ); // 5.0.0.2 (2009/09/15)
143
144 private transient ErrorMessage errMessage = null;
145 private int errCode = ErrorMessage.OK;
146 private int executeCount = -1;
147 // private Connection conn = null; // 5.1.9.0 (2010/08/01) Transaction 対å¿?
148 private ArrayTableModel arrTable= null;
149 private HybsLoader loader = null;
150
151 private String srcDir = HybsSystem.sys( "REAL_PATH" ) + HybsSystem.sys( "BIZLOGIC_SRC_PATH" );
152 private String classDir = HybsSystem.sys( "REAL_PATH" ) + HybsSystem.sys( "BIZLOGIC_CLASS_PATH" );
153 private boolean isAutoCompile = HybsSystem.sysBool( "BIZLOGIC_AUTO_COMPILE" );
154 private boolean isHotDeploy = HybsSystem.sysBool( "BIZLOGIC_HOT_DEPLOY" );
155 private boolean isMulti = false; // 5.1.8.0 (2010/07/01) 追åŠ?
156
157 private static final String CLASS_PATH;
158
159 // HotDeploy機è?を使用する場合に、Javaクラスをコンパイルするためのクラスパスを設定しますã?
160 // 対象となるクラスパスは、WEB-INF/classes 及ã? WEB-INF/lib/*.jar ですã?
161
162 static {
163 StringBuilder sb = new StringBuilder();
164 sb.append( '.' ).append( File.pathSeparatorChar );
165 File lib = new File( HybsSystem.sys( "REAL_PATH" ) + "WEB-INF" + File.separator + "lib" );
166 File[] libFiles = lib.listFiles();
167 for( int i=0; i<libFiles.length; i++ ) {
168 // 5.1.1.2 (2009/12/10) File.pathSeparatorCharを使用
169 // 5.1.8.0 (2010/07/01) libの検索パスの不å?合対å¿?
170 // sb.append( libFiles[i] ).append( ';' );
171 sb.append( libFiles[i].getAbsolutePath() ).append( File.pathSeparatorChar );
172 }
173 sb.append( HybsSystem.sys( "REAL_PATH" ) + "WEB-INF" + File.separator + "classes" ).append( File.pathSeparatorChar );
174 // 5.1.8.0 (2010/07/01) bizの下も検索パスに追åŠ?
175 sb.append( HybsSystem.sys( "REAL_PATH" ) + HybsSystem.sys( "BIZLOGIC_CLASS_PATH" ) ).append( File.pathSeparatorChar );
176
177 CLASS_PATH = sb.toString();
178 }
179
180 /**
181 * Taglibの開始タグが見つかったときに処ç�?�™ã‚?doStartTag() ã‚?オーバã?ライドしますã?
182 *
183 * @og.rev 5.3.4.0 (2011/04/01) command=ENTRY以外ではDBTableModelの処ç�?‚’行わなã�??
184 *
185 * @return 後続å?ç�??æŒ?¤º(SKIP_BODY)
186 */
187 @Override
188 public int doStartTag() {
189 // 5.3.4.0 (2011/04/01)
190 // if( !check( command, COMMAND_LIST ) ) {
191 // return(SKIP_BODY);
192 // }
193
194 if( CMD_ENTRY.equals( command ) ) {
195 startQueryTransaction( tableId );
196 }
197
198 return( SKIP_BODY );
199 }
200
201 /**
202 * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
203 *
204 * @og.rev 5.1.8.0 (2010/07/01) isMulti対å¿?
205 * @og.rev 5.3.4.0 (2011/04/01) command=ENTRY以外ではDBTableModelの処ç�?‚’行わなã�??
206 *
207 * @return 後続å?ç�??æŒ?¤º
208 */
209 @Override
210 public int doEndTag() {
211 debugPrint();
212
213 // 5.3.4.0 (2011/04/01)
214 // if( check( command, COMMAND_LIST ) ) {
215 useQuotCheck( quotCheck );
216 useXssCheck( xssCheck );
217
218 makeVals();
219 execute();
220
221 String err = TaglibUtil.makeHTMLErrorTable( errMessage,getResource() );
222 if( err != null && err.length() > 0 ) {
223 setSessionAttribute( ERR_MSG_ID,errMessage );
224 }
225
226 if( table != null && ! commitTableObject( tableId, table ) ) {
227 jspPrint( "BizLoicTag 処ç�?�Œ割り込まれましたã€?BTableModel は登録しませんã€? );
228 return (SKIP_PAGE);
229 }
230
231 jspPrint( err );
232 // }
233
234 if( errCode >= ErrorMessage.NG && stopError ) {
235 return SKIP_PAGE;
236 }
237 else {
238 return EVAL_PAGE;
239 }
240 }
241
242 /**
243 * タグリブオブジェクトをリリースしますã?
244 * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
245 *
246 * @og.rev 5.1.8.0 (2010/07/01) isMultiを追åŠ?
247 * @og.rev 5.1.9.0 (2010/08/01) Transaction 対å¿?
248 */
249 @Override
250 protected void release2() {
251 super.release2();
252 command = CMD_ENTRY;
253 logics = null;
254 dbid = null;
255 table = null;
256 tableId = HybsSystem.TBL_MDL_KEY;
257 selectedAll = false;
258 modifyType = null;
259 keys = null;
260 vals = null;
261 stopError = true;
262 quotCheck = HybsSystem.sysBool( "USE_SQL_INJECTION_CHECK" );
263 xssCheck = HybsSystem.sysBool( "USE_XSS_CHECK" );
264 errMessage = null;
265 errCode = ErrorMessage.OK;
266 executeCount = -1;
267 // conn = null; // 5.1.9.0 (2010/08/01) Transaction 対å¿?
268 arrTable = null;
269 loader = null;
270 srcDir = HybsSystem.sys( "REAL_PATH" ) + HybsSystem.sys( "BIZLOGIC_SRC_PATH" );
271 classDir = HybsSystem.sys( "REAL_PATH" ) + HybsSystem.sys( "BIZLOGIC_CLASS_PATH" );
272 isAutoCompile = HybsSystem.sysBool( "BIZLOGIC_AUTO_COMPILE" );
273 isHotDeploy = HybsSystem.sysBool( "BIZLOGIC_HOT_DEPLOY" );
274 isMulti = false; // 5.1.8.0 (2010/07/01) 追åŠ?
275 }
276
277 /**
278 * 業務ロジãƒ?‚¯を実行しますã?
279 *
280 * @og.rev 5.1.9.0 (2010/08/01) Transaction 対å¿?
281 * @og.rev 5.3.4.0 (2011/04/01) command=ENTRY以外ではDBTableModelの処ç�?‚’行わなã�??
282 * @og.rev 5.3.7.0 (2011/07/01) TransactionReal の引数変更 、Transaction対応で、close処ç�?‚’入れるã€?
283 * @og.rev 5.6.0.3 (2012/01/24) arrTable に変更されたå?をã?table に書き戻すå?ç�?‚’追åŠ?
284 */
285 private void execute() {
286 int[] rowNos = new int[0];
287
288 // 5.3.4.0 (2011/04/01)
289 if( CMD_ENTRY.equals( command ) ) {
290 table = (DBTableModel)getObject( tableId );
291 }
292
293 if( table != null ) {
294 rowNos = getParameterRows();
295 String[][] tblVals = new String[rowNos.length][table.getColumnCount()];
296 String[] modTypes = new String[rowNos.length];
297 for( int i=0; i<rowNos.length; i++ ) {
298 tblVals[i] = table.getValues( rowNos[i] );
299 modTypes[i] = table.getModifyType( rowNos[i] );
300 }
301 arrTable = new ArrayTableModel( table.getNames(), tblVals, modTypes );
302 }
303
304 // 5.1.9.0 (2010/08/01) Transaction 対å¿?
305 // final Transaction tran ;
306 Transaction tran = null;
307 // 5.3.7.0 (2011/07/01) Transaction対応で、close処ç�?‚’入れるã€?
308 try {
309 TransactionTag tranTag = (TransactionTag)findAncestorWithClass( this,TransactionTag.class );
310 if( tranTag == null ) {
311 // tran = new TransactionReal( dbid,getApplicationInfo() );
312 tran = new TransactionReal( getApplicationInfo() ); // 5.3.7.0 (2011/07/01) 引数変更
313 }
314 else {
315 tran = tranTag.getTransaction();
316 }
317 // conn = ConnectionFactory.connection( dbid, null );
318 errMessage = new ErrorMessage();
319 loader = HybsLoaderFactory.getLoader(
320 new HybsLoaderConfig( srcDir, classDir, isAutoCompile, isHotDeploy, CLASS_PATH )
321 );
322
323 boolean rtn = false;
324 for( int i=0; i<logics.length; i++ ) {
325 // BizLogic logic = (BizLogic)loader.newInstance( logics[i] );
326 // rtn = call( logic );
327 // rtn = call( logics[i] );
328 rtn = call( logics[i] , tran ); // 5.1.9.0 (2010/08/01) Transaction 対å¿?
329 if( !rtn ) { break; }
330 }
331
332 // 5.6.0.3 (2012/01/24) arrTable に変更されたå?をã?table に書き戻すå?ç�?
333 if( arrTable != null ) {
334 Map<Integer,String[]> valMap = arrTable.getModifyVals();
335 if( valMap != null ) {
336 for( Map.Entry<Integer, String[]> entr : valMap.entrySet()) {
337 int seq = entr.getKey(); // intValue() は省略できるã€?
338 String[] vals = entr.getValue();
339 table.setValues( vals , rowNos[seq] ); // DBTableModel へ書き戻しã?å…??行番号に変換がå¿?¦�ã?
340 }
341 }
342 }
343
344 executeCount = rowNos.length;
345 errCode = errMessage.getKekka();
346 setRequestAttribute( "DB.COUNT" , String.valueOf( executeCount ) );
347 setRequestAttribute( "DB.ERR_CODE", String.valueOf( errCode ) );
348
349 if( errCode < ErrorMessage.NG ) {
350 // Closer.commit( conn );
351 tran.commit(); // 5.1.9.0 (2010/08/01) Transaction 対å¿?
352
353 if( table != null && rowNos.length > 0 ) {
354 for( int j=rowNos.length-1; j>=0; j-- ) {
355 int row = rowNos[j];
356 if( DBTableModel.DELETE_TYPE.equals( table.getModifyType( row ) ) ) {
357 table.removeValue( row );
358 }
359 else {
360 table.resetModify( row );
361 }
362 }
363 }
364 }
365 else {
366 // Closer.rollback( conn );
367 tran.rollback(); // 5.1.9.0 (2010/08/01) Transaction 対å¿?
368 }
369 // ConnectionFactory.close( conn, dbid );
370 // tran.close(); // 5.1.9.0 (2010/08/01) Transaction 対å¿?
371 }
372 finally {
373 if( tran != null ) { tran.close(); }
374 }
375
376 // エラーメãƒ?‚»ージの行番号をå?の選択行に戻しますã?
377 ErrMsg[] errs = errMessage.toArray();
378 ErrorMessage errMsgTmp = new ErrorMessage();
379 for( int i=0; i<errs.length; i++ ) {
380 if( table != null && rowNos.length > 0 ) {
381 errMsgTmp.addMessage( errs[i].copy( rowNos[errs[i].getNo()] + 1 ) );
382 }
383 else {
384 errMsgTmp.addMessage( errs[i].copy( errs[i].getNo() + 1 ) );
385 }
386 }
387 errMessage = errMsgTmp;
388 }
389
390 /**
391 * 業務ロジãƒ?‚¯をCallしますã?
392 *
393 * @og.rev 5.1.9.0 (2010/08/01) Transaction 対å¿?
394 * @og.rev 5.1.9.0 (2010/08/01) DBIDをセãƒ?ƒˆ、ConnectonではなくTransactionを渡すよã�?�«変更
395 * @og.rev 5.6.7.0 (2013/07/27) Exception ã‚?throw するときã?ä¸?—¦、errMsg 変数にセãƒ?ƒˆしますã?
396 *
397 * @param logicName 業務ロジãƒ?‚¯å�?
398 * @param tran Transactionトランザクションオブジェクãƒ?
399 *
400 * @return 業務ロジãƒ?‚¯の呼び出しが成功したかどã�?�‹
401 */
402 // private boolean call( final BizLogic logic ) {
403 // private boolean call( final String logicName ) {
404 private boolean call( final String logicName , final Transaction tran ) {
405 BizLogicHelper logicHp = new BizLogicHelper( logicName, loader );
406
407 if( logicHp.isRequireTable() ) {
408 if( arrTable == null ) {
409 // 5.6.7.0 (2013/07/27) Exception ã‚?throw するときã?ä¸?—¦、errMsg 変数にセãƒ?ƒˆしますã?
410 // throw new HybsSystemException( "TableModelが存在しません。logic=[" + logicName + "]" );
411 String errMsg = "TableModelが存在しません。logic=[" + logicName + "]" ;
412 throw new HybsSystemException( errMsg );
413 }
414 else if( arrTable.getRowCount() == 0 ) { return true; } // 0件のときã?呼び出ししなã�?
415 else { logicHp.setTable( arrTable ); }
416 }
417 // logicHp.setConnection( conn );
418 // logicHp.setConnection( tran.getConnection( dbid ) ); // 5.1.9.0 (2010/08/01) Transaction 対å¿?
419 logicHp.setTransaction( tran );
420 logicHp.setDbid( dbid ); // 5.1.9.0 (2010/08/01) DBIDをセãƒ?ƒˆ
421 logicHp.setKeys( keys );
422 logicHp.setVals( vals );
423 logicHp.setUserId( getUser().getUserID() );
424 logicHp.setParentPgId( getGUIInfoAttri( "KEY" ) );
425 logicHp.setLoader( loader );
426 if( isDebug() ) { logicHp.setDebug(); }
427
428 boolean rtn = false;
429 try {
430 rtn = logicHp.exec();
431 }
432 catch ( Throwable th ) {
433 // Closer.rollback( conn );
434 // ConnectionFactory.remove( conn, dbid );
435 tran.rollback(); // 5.1.9.0 (2010/08/01) Transaction 対å¿?
436 // 5.6.7.0 (2013/07/27) Exception ã‚?throw するときã?ä¸?—¦、errMsg 変数にセãƒ?ƒˆしますã?
437 // throw new HybsSystemException( "業務ロジãƒ?‚¯の処ç�?¸にエラーが発生しましたã€?, th );
438 String errMsg = "業務ロジãƒ?‚¯の処ç�?¸にエラーが発生しましたã€? + th.getMessage() ;
439 throw new HybsSystemException( errMsg,th );
440 }
441 errMessage.append( logicHp.getErrMsg() );
442
443 setRequestAttribute( logicHp.getClass().getSimpleName() + ".RETURN" , logicHp.getReturn() );
444 setRequestAttribute( "RETURN", logicHp.getReturn() );
445
446 if( isDebug() ) { jspPrint( logicHp.getDebugMsg() ); }
447
448 return rtn;
449 }
450
451 /**
452 * Valsの配å?を生成しますã?
453 *
454 * @og.rev 5.1.8.0 (2010/07/01) 新規作æ?-
455 * @og.rev 5.6.7.0 (2013/07/27) Exception ã‚?throw するときã?ä¸?—¦、errMsg 変数にセãƒ?ƒˆしますã?
456 */
457 private void makeVals() {
458 if( keys != null && keys.length > 0 ) {
459 boolean isSetVal = ( vals == null || vals.length == 0 ) ? false : true;
460 if( isSetVal ) {
461 if( keys.length != vals.length ) {
462 // 5.6.7.0 (2013/07/27) Exception ã‚?throw するときã?ä¸?—¦、errMsg 変数にセãƒ?ƒˆしますã?
463 // throw new HybsSystemException( "keysとValsの個数が異なりますã?" );
464 String errMsg = "keysとValsの個数が異なりますã?" + HybsSystem.CR
465 + " keys=" + Arrays.toString( keys ) + HybsSystem.CR
466 + " vals=" + Arrays.toString( vals ) ;
467 throw new HybsSystemException( errMsg );
468 }
469 }
470 else {
471 vals = new String[keys.length];
472 }
473 for( int i=0; i<keys.length; i++ ) {
474 if( isSetVal ) {
475 if( isMulti ) { vals[i] = StringUtil.array2csv( getRequestParameterValues( vals[i] ) );}
476 else { vals[i] = getRequestParameter( vals[i] ); }
477 }
478 else {
479 if( isMulti ) { vals[i] = StringUtil.array2csv( getRequestValues( keys[i] ) );}
480 else { vals[i] = getRequestValue( keys[i] ); }
481 }
482 }
483 }
484 }
485
486 /**
487 * 【TAG】コマンドをセãƒ?ƒˆしまã�?初期値:ENTRY)ã€?
488 *
489 * @og.tag
490 * command=ENTRY以外ではDBTableModelの処ç�?‚’行いませんã€?
491 * コマンドã?,HTMLから[get/post]æŒ?®šされますã?で,CMD_xxx で設定される
492 * フィールド定数値のã�?�¥れかをã?æŒ?®šできますã?
493 *
494 * @param cmd コマンãƒ?public static final 宣è¨?�•れてã�?‚‹æ–?—å?)
495 * @see <a href="{@docRoot}/constant-values.html#org.opengion.hayabusa.taglib.BizLogicTag.CMD_ENTRY">コマンド定数</a>
496 */
497 public void setCommand( final String cmd ) {
498 String cmd2 = getRequestParameter( cmd );
499 if( cmd2 != null && cmd2.length() >= 0 ) { command = cmd2.toUpperCase(Locale.JAPAN); }
500 }
501
502 /**
503 * 【TAG】実行する業務ロジãƒ?‚¯名をæŒ?®šしますã?
504 *
505 * @og.tag
506 * 実行する業務ロジãƒ?‚¯名をæŒ?®šしますã?業務ロジãƒ?‚¯名ã?、クラス名をæŒ?®šしますã?
507 * クラス名につã�?�¦は、クラス自身の名称のみを指定することができますã?
508 * (パッケージ名を含めた完å?な形のクラス名をæŒ?®šすることもできまã�?
509 * またã?カンマ区åˆ?‚Šで、è¤?•°æŒ?®šすることもできますã?
510 * こã?場合ã?æŒ?®šしたé?番に処ç�?�•れますã?
511 *
512 * @param lgs 業務ロジãƒ?‚¯å�?
513 */
514 public void setLogics( final String lgs ) {
515 logics = getCSVParameter( lgs );
516 }
517
518 /**
519 * 【TAGã€?通常は使ã�?�¾せん)Queryオブジェクトを作æ?する時ã?DB接続IDを指定しますã?
520 *
521 * @og.tag
522 * Queryオブジェクトを作æ?する時ã?DB接続IDを指定しますã?
523 * これは、シスãƒ?ƒ リソースで、DEFAULT_DB_URL 等でæŒ?®šしてã�?‚‹ ãƒ??タベã?ス接続å?
524 * æƒ??に、XX_DB_URL を定義することでã€?dbid="XX" とすると、この 接続å?を使用して
525 * ãƒ??タベã?スにアクセスできますã?
526 *
527 * @param id ãƒ??タベã?ス接続ID
528 */
529 public void setDbid( final String id ) {
530 dbid = nval( getRequestParameter( id ),dbid );
531 }
532
533 /**
534 * 【TAGã€?通常は使ã�?�¾せん)結果のDBTableModelをã?sessionに登録するときã?キーを指定しますã?
535 *
536 * @og.tag
537 * 検索結果より、DBTableModelオブジェクトを作æ?しますã?これをã?以下ã?view 等ã?タグに
538 * 渡すå?合にã€??常は、session を利用しますã?そã?場合ã?登録キーですã?
539 * query タグを同時に実行して、結果を求めるå?合ã?同ä¸?ƒ¡モリに配置される為ã€?
540 * こã? tableId 属æ?を利用して、メモリ空間をåˆ?�‘ますã?
541 * 初期値は、HybsSystem.TBL_MDL_KEY ですã?
542 *
543 * @param id sessionに登録する時ã? ID
544 */
545 public void setTableId( final String id ) {
546 tableId = nval( getRequestParameter( id ),tableId );
547 }
548
549 /**
550 * 【TAG】データをå?件選択済みとして処ç�?�™るかどã�?�‹[true/false]を指定しまã�?初期値:false)ã€?
551 *
552 * @og.tag
553 * 全てのãƒ??タを選択済みãƒ??タとして扱って処ç�?�—ますã?
554 * 全件処ç�?�™るå?合にã€?true/false)を指定しますã?
555 * 初期値は false ですã?
556 *
557 * @param all ãƒ??タをå?件選択済み [true:全件選択済み/false:通常]
558 */
559 public void setSelectedAll( final String all ) {
560 selectedAll = nval( getRequestParameter( all ),selectedAll );
561 }
562
563 /**
564 * 【TAG】DB検索時ã? モãƒ?‚£ファイタイプをæŒ?®šします[A:追åŠ?C:更新/D:削除]ã€?
565 *
566 * @og.tag
567 * DB検索時に、そのãƒ??タをA(追åŠ?、C(更新)、D(削除)のモãƒ?‚£ファイタイプを
568 * つけた状態にしますã?
569 * そã?状態で、そのまま、update する事が可能になりますã?
570 *
571 * @param type DB検索時ã?モãƒ?‚£ファイタイãƒ?[A:追åŠ?C:更新/D:削除]
572 */
573 public void setModifyType( final String type ) {
574 modifyType = nval( getRequestParameter( type ),modifyType );
575 }
576
577 /**
578 * 【TAG】リンク先に渡すキーをCSV形式でè¤?•°æŒ?®šしますã?
579 *
580 * @og.tag リンク先に渡すキーを指定しますã?
581 * Keysã�?�‘を指定して、Valsを指定しなã�??合ã?KeysでæŒ?®šされたé ?›®名に対応するパラメーターを取得しã€?
582 * Valsとして使用しますã?
583 *
584 * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用
585 *
586 * @param key リンク先に渡すキー(CSV形å¼?
587 */
588 public void setKeys( final String key ) {
589 // keys = getCSVParameter( key );
590 keys = getCSVParameter( getRequestParameter( key ) );
591 }
592
593 /**
594 * 【TAG】リンク先に渡すå?をCSV形式でè¤?•°æŒ?®šしますã?
595 *
596 * @og.tag リンク先に渡すå?を指定しますã?
597 * Keysã�?�‘を指定して、Valsを指定しなã�??合ã?KeysでæŒ?®šされたé ?›®名に対応するパラメーターを取得しã€?
598 * Valsとして使用しますã?
599 * åˆ?§£方法ã?、CSV変数をå?にåˆ?§£してから、getRequestParameter で値を取得しますã?
600 * こうしなã�?�¨ãƒ??タ自身にカンマを持ってã�?‚‹場合にåˆ?§£をミスる為ですã?
601 *
602 * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用
603 * @og.rev 5.1.8.0 (2010/07/01) isMuitl対å¿?
604 *
605 * @param val リンク先に渡すå?(CSV形å¼?
606 */
607 public void setVals( final String val ) {
608 // vals = getCSVParameter( val );
609 vals = StringUtil.csv2Array( val );
610 }
611
612 /**
613 * 【TAG】å?ç�?‚¨ラーの時に処ç�?‚’中止するかどã�?�‹[true/false]を設定しまã�?初期値:true)ã€?
614 *
615 * @og.tag
616 * false(中止しなã�?に設定するå?合ã?後続å?ç�?�§は、{@DB.ERR_CODE}の値によりã€?
617 * PLSQL/SQLの異常/正常終äº?�«よってåˆ?²�å?ç�??可能となりますã?
618 * 初期値は、true(中止する)ですã?
619 *
620 * @param flag [true:中止する/false:中止しない]
621 */
622 public void setStopError( final String flag ) {
623 stopError = nval( getRequestParameter( flag ),stopError );
624 }
625
626 /**
627 * 【TAG】リクエスト情報の クォーãƒ?‚£ション(') 存在チェãƒ?‚¯を実施するかどã�?�‹[true/false]を設定しまã�?
628 * (初期値:USE_SQL_INJECTION_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_SQL_INJECTION_CHECK}])ã€?
629 *
630 * @og.tag
631 * ?³?±?¬インジェクション対策ã?ä¸?�¤として、暫定的ではありますが、SQLのパラメータに
632 * 渡す文字å?にクォーãƒ?‚£ション(') を許さなã�?¨定にすれば、ある程度は防止できますã?
633 * 数字タイプã?引数にはã€?or 5=5 などのクォーãƒ?‚£ションを使用しなã�?‚³ードを埋めてもã?
634 * 数字チェãƒ?‚¯で検å?可能ですã?æ–?—タイプã?場合ã?、å¿?�š (')をã?ずしてã€?
635 * ' or 'A' like 'A のような形式になる為ã€?')チェãƒ?‚¯ã�?�‘でも有効ですã?
636 * (') が含まれてã�?�Ÿエラーにする(true)?�かノã?チェãƒ?‚¯ã�?false)を指定しますã?
637 * (初期値:シスãƒ?ƒ 定数のUSE_SQL_INJECTION_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_SQL_INJECTION_CHECK}])ã€?
638 *
639 * @param flag クォーãƒ?‚£ションチェãƒ?‚¯ [true:する/それ以å¤?しない]
640 * @see org.opengion.hayabusa.common.SystemData#USE_SQL_INJECTION_CHECK
641 */
642 public void setQuotCheck( final String flag ) {
643 quotCheck = nval( getRequestParameter( flag ),quotCheck );
644 }
645
646 /**
647 * 【TAG】リクエスト情報の HTMLTag開å§?終äº?–‡å?><) 存在チェãƒ?‚¯を実施するかどã�?�‹[true/false]を設定しまã�?
648 * (初期値:USE_XSS_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_XSS_CHECK}])ã€?
649 *
650 * @og.tag
651 * クロスサイトスクリプティング(XSS)対策ã?ä¸?’°としてless/greater than signにつã�?�¦のチェãƒ?‚¯を行いますã?
652 * (><) が含まれてã�?�Ÿエラーにする(true)?�かノã?チェãƒ?‚¯ã�?false)を指定しますã?
653 * (初期値:シスãƒ?ƒ 定数のUSE_XSS_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_XSS_CHECK}])ã€?
654 *
655 * @param flag XSSチェãƒ?‚¯する [true:チェãƒ?‚¯する/false:しない]
656 * @see org.opengion.hayabusa.common.SystemData#USE_XSS_CHECK
657 */
658 public void setXssCheck( final String flag ) {
659 xssCheck = nval( getRequestParameter( flag ),xssCheck );
660 }
661
662 /**
663 * 【TAG】vals属æ?でパラメーターを取得する際、è¤?•°件存在する場合に、å?をé?結するかどã�?�‹を指定しまã�?初期値:false)ã€?
664 *
665 * @og.tag
666 * こã?属æ?がtrueにæŒ?®šされた場合ã?パラメーターがè¤?•°存在する場合に、カンマで連結しますã?
667 * 初期値は、false(連結しなã�?ですã?
668 *
669 * @og.rev 5.1.8.0 (2010/07/01) 新規作æ?
670 *
671 * @param flag パラメーター連結するかどã�?�‹
672 */
673 public void setMulti( final String flag ) {
674 isMulti = nval( getRequestParameter( flag ),isMulti );
675 }
676
677 /**
678 * 表示ãƒ??タの HybsSystem.ROW_SEL_KEY をå?にã€?�¸ばれた 行を処ç�??対象としますã?
679 *
680 * @return 選択行ã?配å?
681 */
682 @Override
683 protected int[] getParameterRows() {
684 final int[] rowNo ;
685 if( selectedAll ) {
686 int rowCnt = table.getRowCount();
687 rowNo = new int[ rowCnt ];
688 for( int i=0; i<rowCnt; i++ ) {
689 rowNo[i] = i;
690 }
691 } else {
692 rowNo = super.getParameterRows();
693 }
694 return rowNo ;
695 }
696
697 /**
698 * シリアライズ用のカスタãƒ?‚·リアライズ書き込みメソãƒ?ƒ‰
699 *
700 * @serialData
701 *
702 * @param strm ObjectOutputStreamオブジェクãƒ?
703 */
704 private void writeObject( final ObjectOutputStream strm ) throws IOException {
705 strm.defaultWriteObject();
706 }
707
708 /**
709 * シリアライズ用のカスタãƒ?‚·リアライズ読み込みメソãƒ?ƒ‰
710 *
711 * ここでは、transient 宣è¨?�•れたå†?ƒ¨変数のå†??初期化がå¿?¦�なフィールドã?み設定しますã?
712 *
713 * @serialData
714 *
715 * @param strm ObjectInputStreamオブジェクãƒ?
716 * @see #release2()
717 */
718 private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
719 strm.defaultReadObject();
720 }
721
722 /**
723 * こã?オブジェクトã?æ–?—å?表現を返しますã?
724 * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
725 *
726 * @return こã?クラスのæ–?—å?表現
727 */
728 @Override
729 public String toString() {
730 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
731 .println( "VERSION" ,VERSION )
732 .println( "command" ,command )
733 .println( "logics" ,logics )
734 .println( "dbid" ,dbid )
735 .println( "tableId" ,tableId )
736 .println( "selectedAll" ,selectedAll )
737 .println( "modifyType" ,modifyType )
738 .println( "keys" ,keys )
739 .println( "vals" ,vals )
740 .println( "stopError" ,stopError )
741 .println( "quotCheck" ,quotCheck )
742 .println( "xssCheck" ,xssCheck )
743 .println( "executeCount" ,executeCount )
744 .println( "errCode" ,errCode )
745 .println( "Other..." ,getAttributes().getAttribute() )
746 .fixForm().toString() ;
747 }
748 }