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.fukurou.util.HybsDateUtil; 019 import static org.opengion.fukurou.util.StringUtil.nval; 020 021 import java.io.IOException; 022 import java.io.ObjectInputStream; 023 import java.io.ObjectOutputStream; 024 // import java.text.DateFormat; 025 // import java.text.SimpleDateFormat; 026 import java.util.Calendar; 027 import java.util.Enumeration; 028 import java.util.LinkedHashSet; 029 import java.util.Locale; 030 import java.util.ArrayList; 031 import java.util.Set; 032 import java.text.NumberFormat; 033 034 import javax.servlet.jsp.PageContext; 035 036 import org.opengion.hayabusa.common.HybsSystem; 037 import org.opengion.hayabusa.common.HybsSystemException; 038 import org.opengion.hayabusa.db.DBColumn; 039 import org.opengion.hayabusa.db.DBTableModel; 040 import org.opengion.hayabusa.db.Query; 041 import org.opengion.hayabusa.db.QueryFactory; 042 import org.opengion.fukurou.util.StringUtil; 043 import org.opengion.fukurou.db.Transaction; 044 import org.opengion.fukurou.db.TransactionReal; 045 046 /** 047 * JSP上からキー、?を設定することにより、リクエスト情報として、?? 048 * 取?し可能にするタグです? 049 * 050 * 通常のリクエスト情報と同じ扱?できま?優先?位?、Valueタグが上?? 051 * 052 * 設定した?は、{@XXXX} 形式で 取り出すことができます? 053 * また?command ="GET" で 直接画面に値を書き?すことも可能です? 054 * 055 * ※ こ?タグは、Transaction タグの対象です? 056 * 057 * @og.formSample 058 * ●形式?lt;og:value command="SET" key="ABC" value="123" /> 059 * ●body?あ?EVAL_BODY_BUFFERED:BODYを評価し?{@XXXX} を解析しま? 060 * 061 * ●Tag定義?? 062 * <og:value 063 * command 【TAG】コマン?SET,GET,REMOVE,SQL,SETTBL,GETTBL,KEYTBL,CLEAR,SETMEM)をセ?しま?初期値:SET) 064 * action 【TAG】アクション(UPPER,LOWER,MESSAGE,APPEND,ALL_APPEND,MAP,ALL_MAP,LIST,ALL_LIST,DAY_WEEK,MERGE,FIRST,ROW_APPEND,REPLACE,SUBSTR,SPLIT,MAX_MIN,ALL_MAX_MIN)をセ?しま? 065 * key 【TAG】リクエスト情報 に登録するキーをセ?しま? 066 * value 【TAG】リクエスト情報 に登録する値をセ?しま? 067 * defaultVal 【TAG】value値がNULLの場合に、この初期値を設定しま? 068 * nullSet 【?】value ?NULL の時に、設定するかど?[true/false]を指定しま?初期値:true) 069 * separator 【TAG】各種アクションの??を???する?区??をセ?しま?初期値:",") 070 * useMultiRows 【TAG】?ルチデータ(?件検索)を使用するかど?[true/false]を指定しま?初期値:false) 071 * scope 【TAG】キャ?ュする場合?スコー?request,session)を指定しま?初期値:request) 072 * tableId 【TAG】sessionから取得す?DBTableModelオブジェクト? ID 073 * tblScope 【TAG】DBTableModel から取得する?合?スコー?request,session)を指定しま?初期値:session) 074 * dbid 【TAG?通常は使?せん)Queryオブジェクトを作?する時?DB接続IDを指定しま? 075 * xssCheck 【TAG】リクエスト情報の HTMLTag開?終??><) 存在チェ?を実施するかど?[true/false]を設定しま?(初期値:USE_XSS_CHECK[=true]) 076 * caseKey 【TAG】このタグ自体を利用するかど?の条件キーを指定しま?初期値:null) 077 * caseVal 【TAG】このタグ自体を利用するかど?の条件値を指定しま?初期値:null) 078 * caseNN 【TAG】指定?値が?null/ゼロ?? でな???Not Null=NN)は、このタグは使用されま?初期値:true) 079 * caseNull 【TAG】指定?値が?null/ゼロ?? の場合?、このタグは使用されま?初期値:true) 080 * toVal 【TAG】部?字?置換? 置換え後?部?字?(to)を指定しま? 081 * fromVal 【TAG】部?字?置換? 置換え前?部?字?(from)を指定しま? 082 * debug 【TAG】デバッグ??を?力するかど?[true/false]を指定しま?初期値:false) 083 * > ... Body ... 084 * </og:value> 085 * 086 * ●使用? 087 * ・ <og:value command="SET" key="ABC" value="123" /> 088 * ・ <og:value command="SQL">SELECT 1 TEST FROM DUAL</og:value> 089 * ・ <og:value command="SET" key="DEF" value="{@NOCOMMAND}" defaultVal="0000" /> 090 * ・ <og:value command="GET" key="NOKEY" defaultVal="NODATA" /> 091 * ・ <og:value command="SET" key="{@ABC}4" value="TEST1234" /> 092 * ・ <og:value command="GET" key="ABC" /> 093 * ・ <og:value command="SET" action="LOWER" key="LOWERTEST" value="ABCDEF" /> 094 * ・ <og:value command="GET" key="LOWERTEST" /> 095 * ・ <og:value command="GET" action="UPPER" key="LOWERTEST" /> 096 * ・ <og:value command="REMOVE" key="ABC" /> 097 * 098 * <style type="text/css"> 099 * #valueJavaDoc th { text-align:center; vertical-align: middle; writing-mode: tb-rl; } 100 * #valueJavaDoc td { text-align:center; } 101 * </style> 102 * 103 * <table border="1" frame="box" rules="all" id="valueJavaDoc"> 104 * <tr><th></th><th>UPPER</th><th>LOWER</th><th>MESSAGE</th><th>APPEND</th><th>ALL_APPEND</th><th>MAP</th><th>ALL_MAP</th><th>LIST</th><th>ALL_LIST</th> 105 * <th>DAY_WEEK</th><th>MERGE</th><th>FIRST</th><th>ROW_APPEND</th><th>REPLACE</th><th>SUBSTR</th><th>SPLIT</th><th>MAX_MIN</th><th>ALL_MAX_MIN</th></tr> 106 * <tr><td>SET </td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td></tr> 107 * <tr><td>GET </td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td></tr> 108 * <tr><td>REMOVE</td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td></tr> 109 * <tr><td>CLEAR </td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td></tr> 110 * <tr><td>SQL </td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td></tr> 111 * <tr><td>SETTBL</td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td></tr> 112 * <tr><td>GETTBL</td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td></tr> 113 * <tr><td>KEYTBL</td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td></tr> 114 * <tr><td>SETMEM</td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td></tr> 115 * <tr><td>SQLGET</td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td><td>?/td></tr> 116 * </table> 117 * 118 * @og.group そ?他部? 119 * 120 * @version 4.0 121 * @author M.Endou 122 * @since JDK5.0, 123 */ 124 public class ValueTag extends CommonTagSupport { 125 //* こ?プログラ??VERSION??を設定します? {@value} */ 126 private static final String VERSION = "5.6.6.1 (2013/07/12)" ; 127 128 private static final long serialVersionUID = 566120130712L ; 129 130 /** command 引数に渡す事?出来?コマン? セ? {@value} */ 131 public static final String CMD_SET = "SET"; 132 /** command 引数に渡す事?出来?コマン? ゲ? {@value} */ 133 public static final String CMD_GET = "GET"; 134 /** command 引数に渡す事?出来?コマン? リ???{@value} */ 135 public static final String CMD_REMOVE = "REMOVE"; 136 /** command 引数に渡す事?出来?コマン? クリア {@value} */ 137 public static final String CMD_CLEAR = "CLEAR"; 138 /** command 引数に渡す事?出来?コマン? ??? {@value} */ 139 public static final String CMD_SQL = "SQL"; 140 /** command 引数に渡す事?出来?コマン? セ???ブル {@value} */ 141 public static final String CMD_SETTBL = "SETTBL"; 142 /** command 引数に渡す事?出来?コマン? ゲ???ブル {@value} */ 143 public static final String CMD_GETTBL = "GETTBL"; 144 /** command 引数に渡す事?出来?コマン? キー??ブル {@value} */ 145 public static final String CMD_KEYTBL = "KEYTBL"; 146 /** command 引数に渡す事?出来?コマン? セ?メモリ {@value} */ 147 public static final String CMD_SETMEM = "SETMEM"; // 3.7.1.0 (2005/04/15) 148 /** command 引数に渡す事?出来?コマン? ???ゲ? {@value} */ 149 public static final String CMD_SQLGET = "SQLGET"; // 5.1.7.0 (2010/06/01) SQLGET対? 150 151 /** command 引数に渡す事?出来?コマン?リス? */ 152 private static final String[] COMMAND_LIST = new String[] { 153 CMD_SET , CMD_GET , CMD_REMOVE , CMD_SQL , CMD_SETTBL , CMD_GETTBL , 154 CMD_KEYTBL , CMD_CLEAR , CMD_SETMEM, CMD_SQLGET }; 155 156 /** action 引数に渡す事?出来?アクション ア?ー(大?化) {@value} */ 157 public static final String ACT_UPPER = "UPPER" ; 158 /** action 引数に渡す事?出来?アクション ローワー(小文字化) {@value} */ 159 public static final String ACT_LOWER = "LOWER" ; 160 /** action 引数に渡す事?出来?アクション メ?ージ変換 {@value} */ 161 public static final String ACT_MESSAGE = "MESSAGE" ; 162 /** action 引数に渡す事?出来?アクション ??タアペン?{@value} */ 163 public static final String ACT_APPEND = "APPEND" ; 164 /** action 引数に渡す事?出来?アクション オールアペン?{@value} */ 165 public static final String ACT_ALL_APPEND = "ALL_APPEND" ; // 3.6.1.0 (2005/01/05) 166 /** action 引数に渡す事?出来?アクション MAP {@value} */ 167 public static final String ACT_MAP = "MAP" ; // 5.5.0.3 (2012/03/12) 168 /** action 引数に渡す事?出来?アクション ALL_MAP {@value} */ 169 public static final String ACT_ALL_MAP = "ALL_MAP" ; // 5.5.0.3 (2012/03/12) 170 /** action 引数に渡す事?出来?アクション LIST {@value} */ 171 public static final String ACT_LIST = "LIST" ; // 4.3.7.5 (2009/07/13) 172 /** action 引数に渡す事?出来?アクション ALL_LIST {@value} */ 173 public static final String ACT_ALL_LIST = "ALL_LIST" ; // 4.3.7.5 (2009/07/13) 174 /** action 引数に渡す事?出来?アクション 日付前方まるめ {@value} */ 175 public static final String ACT_DAY_WEEK = "DAY_WEEK" ; // 3.7.1.0 (2005/04/15) 176 /** action 引数に渡す事?出来?アクション マ?ジ {@value} */ 177 public static final String ACT_MERGE = "MERGE" ; // 3.7.1.1 (2005/05/23) 178 /** action 引数に渡す事?出来?アクション ファース?{@value} */ 179 public static final String ACT_FIRST = "FIRST" ; // 3.8.0.4 (2005/08/08) 180 /** action 引数に渡す事?出来?アクション 縦横回転 {@value} */ 181 public static final String ACT_ROW_APPEND = "ROW_APPEND" ; // 3.8.9.2 (2007/07/28) 182 /** action 引数に渡す事?出来?アクション ??置?{@value} */ 183 public static final String ACT_REPLACE = "REPLACE" ; // 5.2.2.0 (2010/11/01) 184 /** action 引数に渡す事?出来?アクション 部?字? {@value} */ 185 public static final String ACT_SUBSTR = "SUBSTR" ; // 5.2.2.0 (2010/11/01) 186 /** action 引数に渡す事?出来?アクション ??? {@value} */ 187 public static final String ACT_SPLIT = "SPLIT" ; // 5.2.2.0 (2010/11/01) 188 /** action 引数に渡す事?出来?アクション ?_?? {@value} */ 189 public static final String ACT_MAX_MIN = "MAX_MIN" ; // 5.6.4.3 (2013/05/24) 190 /** action 引数に渡す事?出来?アクション ALL_?_?? {@value} */ 191 public static final String ACT_ALL_MAX_MIN = "ALL_MAX_MIN" ; // 5.6.4.3 (2013/05/24) 192 193 /** action 引数に渡す事?出来?アクション リス? */ 194 private static final String[] ACTION_LIST = new String[] { 195 // ACT_UPPER , ACT_LOWER , ACT_MESSAGE , ACT_APPEND , ACT_ALL_APPEND , ACT_DAY_WEEK , ACT_MERGE , ACT_FIRST }; 196 // ACT_UPPER , ACT_LOWER , ACT_MESSAGE , ACT_APPEND , ACT_ALL_APPEND , ACT_LIST, ACT_ALL_LIST , ACT_DAY_WEEK , ACT_MERGE , ACT_FIRST , ACT_ROW_APPEND }; 197 // ACT_UPPER , ACT_LOWER , ACT_MESSAGE , ACT_APPEND , ACT_ALL_APPEND , ACT_LIST, ACT_ALL_LIST , 198 ACT_UPPER , ACT_LOWER , ACT_MESSAGE , ACT_APPEND , ACT_ALL_APPEND , ACT_MAP , ACT_ALL_MAP , ACT_LIST, ACT_ALL_LIST , 199 // ACT_DAY_WEEK , ACT_MERGE , ACT_FIRST , ACT_ROW_APPEND , ACT_REPLACE , ACT_SUBSTR , ACT_SPLIT }; 200 ACT_DAY_WEEK , ACT_MERGE , ACT_FIRST , ACT_ROW_APPEND , ACT_REPLACE , ACT_SUBSTR , ACT_SPLIT , ACT_MAX_MIN , ACT_ALL_MAX_MIN 201 }; 202 203 private String tableId = HybsSystem.TBL_MDL_KEY; 204 private String command = CMD_SET; 205 private String key = null; 206 private String inValue = null; // 3.5.4.0 (2003/11/25) 207 private String value = null; 208 private String defaultVal = null; 209 private String action = null; 210 // private boolean isNullSet = true; // NULL のときにセ?し直すかど??.1.8.0 (2010/07/01) ? 211 private transient DBTableModel table = null; 212 // 4.0.0.0 (2007/10/10) dbid の初期値を?"DEFAULT" から null に変更 213 // private String dbid = "DEFAULT"; 214 private String dbid = null; 215 private String scope = "request"; // "request","session" 216 private String tblScope = "session"; // 5.1.2.0 (2010/01/01) DBTableModel の取得?のscope 217 private String separator = ","; // ?区??? 218 // private String parameter = null; // 5.6.4.3 (2013/05/24) 未使用なので削除 219 // 3.2.4.0 (2003/06/12) マルチデータ(?件検索)を使用するかしな?? 220 private boolean useMultiRows = false; // 初期値:使用せず 221 222 private boolean xssCheck = HybsSystem.sysBool( "USE_XSS_CHECK" ); // 5.1.7.0 (2010/06/01) XSS対? 223 224 private String fromVal = null; // 5.2.2.0 (2010/11/01) 225 private String toVal = null; // 5.2.2.0 (2010/11/01) 226 227 private boolean tmpSelectedAll = false; // 5.6.4.3 (2013/05/24) action="ALL_xxx"?tmpSelectedAll="true" で?処?ます? 228 229 /** 230 * Taglibの開始タグが見つかったときに処??doStartTag() ?オーバ?ライドします? 231 * 232 * @og.rev 3.1.7.0 (2003/05/02) isNullSet 属??true(初期値)のとき?、リクエスト情報から値を取得? 233 * @og.rev 3.1.7.0 (2003/05/02) scope 属?を設定するタイミングを?早くする? 234 * @og.rev 3.5.4.0 (2003/11/25) getRequestParameter( value ) メソ??setValue に移動? 235 * @og.rev 5.1.7.0 (2010/06/01) SQLGET対? 236 * @og.rev 5.1.8.0 (2010/07/01) isNullSet 属? ? 237 * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属?対? 238 * 239 * @return 後続???? 240 */ 241 @Override 242 public int doStartTag() { 243 // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属?対? 244 if( useTag() ) { 245 super.setScope( scope ); // ?ォル?cope ?"request" なので、?設定して?? 246 247 // if( isNullSet ) { 248 // setUseValue( false ); 249 // } 250 251 // 5.1.7.0 (2010/06/01) SQLGET対? 252 if( CMD_SQL.equals( command ) || CMD_SET.equals( command ) || CMD_SQLGET.equals( command ) ) { 253 return ( EVAL_BODY_BUFFERED ); // Body を評価する 254 } 255 // else { 256 // return ( SKIP_BODY ); // Body を評価しな? 257 // } 258 } 259 return ( SKIP_BODY ); // Body を評価しな? 260 } 261 262 /** 263 * Taglibのタグ本体を処??doAfterBody() ?オーバ?ライドします? 264 * 265 * @og.rev 3.1.1.0 (2003/03/28) ボディの?を取得する??、CommonTagSupport で行う? 266 * @og.rev 3.6.0.8 (2004/11/19) エラー発生時に確実にリリースされるよ? try finally 追? 267 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設? 268 * @og.rev 4.0.0.0 (2005/01/31) lang ?ResourceManager へ変更 269 * @og.rev 5.1.7.0 (2010/06/01) SQLGET対? 270 * @og.rev 5.1.7.0 (2010/06/01) XSS解除対? 271 * @og.rev 5.1.9.0 (2010/08/01) TransactionTag 対応?上位に TransactionTag があれ?、そこからConnection をもらう? 272 * @og.rev 5.2.1.0 (2010/10/01) command="SET" action="APPEND"でvalueをbody部に書?場合に動作しな?グを修正 273 * @og.rev 5.3.7.0 (2011/07/01) TransactionReal の引数変更 274 * @og.rev 5.3.8.0 (2011/08/01) Transaction発生?でclose() 275 * 276 * @return 後続????(SKIP_BODY) 277 */ 278 @Override 279 public int doAfterBody() { 280 if( value == null || value.length() <= 0 ) { 281 // 5.1.7.0 (2010/06/01) XSS対? 282 useXssCheck( xssCheck ); 283 284 value = getBodyString(); 285 // 5.2.1.0 (2010/10/01) 286 inValue = getBodyRawString(); 287 288 // 5.1.7.0 (2010/06/01) SQLGET対? 289 if( CMD_SQL.equals( command ) || CMD_SQLGET.equals( command ) ) { 290 Query query = QueryFactory.newInstance(); // 4.0.0 (2005/01/31) 291 Transaction tran = null; 292 try { 293 value = value.trim(); 294 295 // 5.1.9.0 (2010/08/01) TransactionTag 対? 296 // final Transaction tran ; 297 TransactionTag tranTag = (TransactionTag)findAncestorWithClass( this,TransactionTag.class ); 298 if( tranTag == null ) { 299 // tran = new TransactionReal( dbid,getApplicationInfo() ); 300 tran = new TransactionReal( getApplicationInfo() ); // 5.3.7.0 (2011/07/01) 引数変更 301 } 302 else { 303 tran = tranTag.getTransaction(); 304 } 305 query.setTransaction( dbid,tran ); // 5.1.9.0 (2010/08/01) TransactionTag 対? 306 307 // query.setConnectionID( dbid ); 308 query.setResourceManager( getResource() ); // 4.0.0 (2005/01/31) 309 310 query.setStatement( value ); 311 // query.setApplicationInfo( getApplicationInfo() ); // 3.8.7.0 (2006/12/15) 312 query.execute(); 313 314 table = query.getDBTableModel(); 315 } 316 finally { 317 // if( query != null ) { query.close(); } 318 QueryFactory.close( query ); 319 if( tran != null ) { tran.close(); } // 5.3.8.0 (2011/08/01) Transaction発生?でclose() 320 } 321 } 322 } 323 324 return ( SKIP_BODY ); 325 } 326 327 /** 328 * Taglibの終?グが見つかったときに処??doEndTag() ?オーバ?ライドします? 329 * 330 * @og.rev 3.1.0.1 (2003/03/26) DBTableModelの値をSET/GETできる command , action を追?? 331 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応?release2() ?doEndTag()で呼ぶ? 332 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応?release2() ?doEndTag()で呼ぶ? 333 * @og.rev 3.1.5.0 (2003/04/22) DBTableModel が存在するとき?み実行するロジ?になって?バグ対応? 334 * @og.rev 5.1.2.0 (2010/01/01) DBTableModel の取得?の tblScope を追?? 335 * @og.rev 5.1.7.0 (2010/06/01) SQLGET対? 336 * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属?対? 337 * 338 * @return 後続???? 339 */ 340 @Override 341 public int doEndTag() { 342 debugPrint(); // 4.0.0 (2005/02/28) 343 // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属?対? 344 if( useTag() ) { 345 if( check( command, COMMAND_LIST ) ) { 346 if( CMD_SETTBL.equals( command ) || 347 CMD_GETTBL.equals( command ) || 348 CMD_KEYTBL.equals( command ) ) { 349 // table = (DBTableModel)getSessionAttribute( tableId ); 350 // 5.1.2.0 (2010/01/01) DBTableModel の取得?の tblScope を追?? 351 if( "session".equals( tblScope ) ) { table = (DBTableModel) getSessionAttribute( tableId ); } 352 else if( "request".equals( tblScope ) ) { table = (DBTableModel) getRequestAttribute( tableId ); } 353 else { 354 String errMsg = "こ?スコープ?サポ?トされて?せん?" + tblScope + "]"; 355 throw new IllegalArgumentException( errMsg ); 356 } 357 } 358 } 359 360 commandExec( command ); 361 362 // 5.1.7.0 (2010/06/01) SQLGET対? 363 if( CMD_GET.equals( command ) || CMD_GETTBL.equals( command ) || CMD_SQLGET.equals( command ) ) { 364 if( value != null ) { jspPrint( value ); } 365 } 366 } 367 return(EVAL_PAGE); 368 } 369 370 /** 371 * タグリブオブジェクトをリリースします? 372 * キャ?ュされて再利用される?で、フィールド?初期設定を行います? 373 * 374 * @og.rev 2.0.0.4 (2002/09/27) カスタ?グの release() メソ?を?追? 375 * @og.rev 3.1.0.1 (2003/03/26) DBTableModelの値をSET/GETできる command , action を追?? 376 * @og.rev 3.1.0.1 (2003/03/26) query 属?を削除します? 377 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応?release2() ?doEndTag()で呼ぶ? 378 * @og.rev 3.2.4.0 (2003/06/12) マルチデータ(?件検索)を使用するかしな?? 379 * @og.rev 3.5.4.0 (2003/11/25) inValue 変数の追? 380 * @og.rev 4.0.0.0 (2007/10/10) dbid の初期値を?"DEFAULT" から null に変更 381 * @og.rev 5.1.2.0 (2010/01/01) DBTableModel の取得?の tblScope を追?? 382 * @og.rev 5.1.7.0 (2010/06/01) XSS解除対? 383 * @og.rev 5.1.8.0 (2010/07/01) isNullSet 属? ? 384 * @og.rev 5.2.2.0 (2010/11/01) fromVal , toVal 属? 追? 385 * @og.rev 5.6.4.3 (2013/05/24) parameter 属?は、未使用なので削除 386 * @og.rev 5.6.4.3 (2013/05/24) tmpSelectedAll 属?追??action="ALL_xxx"?tmpSelectedAll="true" に置き換えます? 387 * 388 */ 389 @Override 390 protected void release2() { 391 super.release2(); 392 tableId = HybsSystem.TBL_MDL_KEY; 393 command = CMD_SET; 394 key = null; 395 value = null; 396 defaultVal = null; 397 action = null; 398 // isNullSet = true; // NULL のときにセ?し直すかど?? 399 table = null; 400 // dbid = "DEFAULT"; 401 dbid = null; 402 scope = "request"; // "request","session" 403 tblScope = "session"; // 5.1.2.0 (2010/01/01) DBTableModel の取得?のscope 404 separator = ","; 405 // parameter = null; // 5.6.4.3 (2013/05/24) 未使用なので削除 406 useMultiRows = false; 407 tmpSelectedAll = false; // 5.6.4.3 (2013/05/24) 408 inValue = null; // 3.5.4.0 (2003/11/25) 409 xssCheck = HybsSystem.sysBool( "USE_XSS_CHECK" ); // 5.1.7.0 (2010/06/01) XSS解除対? 410 fromVal = null; // 5.2.2.0 (2010/11/01) 411 toVal = null; // 5.2.2.0 (2010/11/01) 412 } 413 414 /** 415 * コマンドを実行します? 416 * 417 * コマンド?,HTMLから(get/post)?されます?で,CMD_xxx で設定される 418 * フィールド定数値の?れかを??できます? 419 * コマンドを登録すると同時に,実行も行な?す? 420 * 421 * @og.rev 3.1.0.1 (2003/03/26) command に、SETTBL / GETTBL / KEYTBL / CLEAR を追?? 422 * @og.rev 3.1.0.1 (2003/03/26) query 属?を削除します? 423 * @og.rev 3.1.7.0 (2003/05/02) scope 属?を設定するタイミングを?早くする? 424 * @og.rev 3.7.1.0 (2005/04/15) command に、SETMEM を追?? 425 * @og.rev 5.1.7.0 (2010/06/01) SQLGET対? 426 * 427 * @param command コマン?public static final 宣?れて???) 428 * @see <a href="{@docRoot}/constant-values.html#org.opengion.hayabusa.taglib.ValueTag.CMD_GET">コマンド定数</a> 429 */ 430 private void commandExec( final String command ) { 431 432 if( CMD_SQL.equals( command ) ) { 433 setSQLAttribute( table ); 434 } 435 else if( CMD_SQLGET.equals( command ) ) { 436 value = getSQLAttribute( table ); 437 } 438 else if( CMD_SET.equals( command ) ) { 439 value = nval( value, defaultVal ); 440 setAttribute( key,value,action ); 441 } 442 else if( CMD_GET.equals( command ) ) { 443 value = getAttribute( key,action ); 444 } 445 else if( CMD_REMOVE.equals( command ) ) { 446 removeAttribute( key ); 447 } 448 else if( CMD_CLEAR.equals( command ) ) { 449 clearAttribute( key ); 450 } 451 else if( CMD_SETTBL.equals( command ) ) { 452 setTableAttribute( table,key,action ); 453 } 454 else if( CMD_GETTBL.equals( command ) ) { 455 value = getTableAttribute( table,key,action ); 456 } 457 else if( CMD_KEYTBL.equals( command ) ) { 458 setKeyTableAttribute( table,key,value,action ); 459 } 460 else if( CMD_SETMEM.equals( command ) ) { // 3.7.1.0 (2005/04/15) 461 value = nval( value, defaultVal ); 462 setAttribute( key,value,action ); 463 setRequestCacheData( key,(String)getObject( key ) ); 464 } 465 } 466 467 /** 468 * アクションを実行します? 469 * 470 * コマンド? action 属?で?します? 471 * action コマン?が? null の場合?、なにも実行しません? 472 * 473 * @og.rev 3.0.1.3 (2003/03/11) MESSAGE action を追? 474 * @og.rev 3.1.0.1 (2003/03/26) 引数を与えて処?る様に変更する? 475 * @og.rev 3.7.1.0 (2005/04/15) action に、DAY_WEEK を追?? 476 * @og.rev 3.7.1.1 (2005/05/23) action に、MERGE を追?? 477 * @og.rev 4.0.0.0 (2007/10/18) メ?ージリソース統? getResource().getMessage > getResource().getLabel ) 478 * @og.rev 5.2.2.0 (2010/11/01) ACT_MERGE 時には、カンマで?、separator で合?を行います? 479 * @og.rev 5.2.2.0 (2010/11/01) ACT_REPLACE 処?新規追?ます? 480 * @og.rev 5.5.7.2 (2012/10/09) HybsDateUtil を利用するように修正します? 481 * @og.rev 5.6.6.1 (2013/07/12) value ?null の場合?、無視します? 482 * 483 * @param action コマン?public static final 宣?れて???) 484 * @param value 旧の値 485 * 486 * @return 処??値 487 */ 488 private String actionExec( final String action,final String value ) { 489 String rtn = value; 490 491 // 5.6.6.1 (2013/07/12) value ?null の場合?、無視します? 492 // if( action == null ) { return rtn; } 493 if( action == null || value == null ) { return rtn; } 494 495 if( ACT_UPPER.equals( action ) ) { 496 // Localeを?通管?るよ?なった?合?String.toUpperCase( Locale locale )使用の? 497 rtn = value.toUpperCase(Locale.JAPAN); 498 } 499 else if( ACT_LOWER.equals( action ) ) { 500 // Localeを?通管?るよ?なった?合?String.toLowerCase( Locale locale )使用の? 501 rtn = value.toLowerCase(Locale.JAPAN); 502 } 503 else if( ACT_MESSAGE.equals( action ) ) { 504 // 引数をメ?ージリソースのキーとして、メ?ージ変換する? 505 // rtn = getResource().getMessage( value ); 506 rtn = getResource().getLabel( value ); 507 } 508 else if( ACT_DAY_WEEK.equals( action ) ) { 509 // 日付型??(YYYYMMDD) の入力データを?開始日を月曜日にセ?します? 510 // SUNDAY=1 , MONDAY=2 になります?月曜日との差?、前に戻します? 511 // ?日が日曜日の場合?、次の日(月曜日)に進めます? 512 Calendar ymd = HybsSystem.getCalendar( value ); 513 int shu = ymd.get( Calendar.DAY_OF_WEEK ) - Calendar.MONDAY ; 514 515 if( shu != 0 ) { ymd.add( Calendar.DATE, -shu ); } 516 517 // DateFormat formatter = new SimpleDateFormat( "yyyyMMdd",Locale.JAPAN ); 518 // rtn = formatter.format( ymd.getTime() ); 519 rtn = HybsDateUtil.getDate( ymd.getTimeInMillis() , "yyyyMMdd" ); // 5.5.7.2 (2012/10/09) HybsDateUtil を利用 520 } 521 // 3.7.1.1 (2005/05/23) 522 else if( ACT_MERGE.equals( action ) ) { 523 // 引数をカンマで??配?に?します? 524 String[] str = StringUtil.csv2Array( value ); 525 Set<String> set = new LinkedHashSet<String>(); 526 for( int i=0; i<str.length; i++ ) { 527 if( str[i] != null && str[i].length() > 0 ) { 528 set.add( str[i] ); 529 } 530 } 531 532 // ?後?マ?ジ(Setで)されます? 登録??、キープします? 533 // rtn = StringUtil.iterator2line( set.iterator(),"," ); 534 rtn = StringUtil.iterator2line( set.iterator(),separator ); // 5.2.2.0 (2010/11/01) separator 使用 535 } 536 // 5.2.2.0 (2010/11/01) ACT_REPLACE 処?新規追? 537 else if( ACT_REPLACE.equals( action ) ) { 538 // value.replaceAll( from, to ) と??で処?ます? 539 if( value != null && fromVal != null && toVal != null ) { 540 rtn = value.replaceAll( fromVal, toVal ); 541 } 542 } 543 // 5.2.2.0 (2010/11/01) SUBSTR 処?新規追? 544 else if( ACT_SUBSTR.equals( action ) ) { 545 // value.substring( from, to ) と??で処?ます? 546 if( value != null) { 547 int from = (fromVal==null||fromVal.length()==0) ? 0 : Integer.parseInt( fromVal ); 548 int to = ( toVal==null|| toVal.length()==0) ? value.length() : Integer.parseInt( toVal ); 549 550 rtn = value.substring( from, to ); 551 } 552 } 553 554 return rtn; 555 } 556 557 /** 558 * ??スコープ??キャ?ュ??を?キーで登録します? 559 * 560 * @og.rev 3.1.0.1 (2003/03/26) 引数を与えて処?る様に変更する? 561 * @og.rev 3.5.4.0 (2003/11/25) APPENDアクションを有効にします? 562 * @og.rev 3.5.6.5 (2004/08/09) APPEND時?セパレータを外部??変数を使用 563 * @og.rev 5.1.8.0 (2010/07/01) isNullSet 属? ? 564 * @og.rev 5.2.2.0 (2010/11/01) ACT_SPLIT 追? 565 * @og.rev 5.6.4.3 (2013/05/24) ACT_MAX_MIN アクションの追? 566 * @og.rev 5.6.6.1 (2013/07/12) value ?null の場合?、無視します? 567 * 568 * @param key キー 569 * @param value 値 570 * @param action アクション 571 */ 572 private void setAttribute( final String key,final String value,final String action ) { 573 if( key == null || key.length() == 0 ) { 574 String errMsg = "key がセ?されて?せん? 575 + " command=" + command + " , action=" + action 576 + " , value=" + value ; // 5.1.8.0 (2010/07/01) errMsg 修正 577 throw new HybsSystemException( errMsg ); 578 } 579 580 // 5.1.8.0 (2010/07/01) isNullSet 属? ? 581 // if( isNullSet || ( !isNullSet && ( value != null && value.length() > 0 ) ) ) { 582 // 5.6.6.1 (2013/07/12) value ?null の場合?、無視します? 583 if( value != null ) { 584 if( ACT_APPEND.equals( action ) ) { 585 String[] array = getRequestParameterValues( inValue ); 586 setObject( key, StringUtil.array2line( array,separator ) ); 587 } 588 // 5.2.2.0 (2010/11/01) ACT_SPLIT 追? 589 else if( ACT_SPLIT.equals( action ) ) { 590 String[] array = value.split( separator ); 591 setObject( key , array[0] ); // キー自体には、?割時?先?の??を設定しておく? 592 for( int i=0; i<array.length; i++ ) { 593 setObject( key + i , array[i] ); 594 } 595 } 596 // 5.6.4.3 (2013/05/24) ACT_MAX_MIN アクションの追? 597 else if( ACT_MAX_MIN.equals( action ) ) { 598 String[] array = value.split( separator ); 599 600 // command="SET" では、数字型としてのみ処?ます? 601 double minNum = Double.MAX_VALUE ; 602 double maxNum = Double.MIN_VALUE ; 603 double sumNum = 0d ; 604 int cntSum = 0; // 平?算に有効な件数 605 606 for( int i=0; i<array.length; i++ ) { 607 String val = array[i].trim().replaceAll( ",","" ); // 数字型フォーマット?カンマを取り除? 608 if( val.isEmpty() ) { continue; } // ゼロ??の場合?、取り直? 609 610 double tmp = Double.parseDouble( val ); 611 if( minNum > tmp ) { minNum = tmp; } 612 if( maxNum < tmp ) { maxNum = tmp; } 613 sumNum += tmp ; cntSum++ ; 614 } 615 616 // command="SET" の場合?、数字型の場合?み使用します? 617 if( cntSum > 0 ) { 618 NumberFormat nf = NumberFormat.getInstance(); 619 nf.setGroupingUsed( false ); // カンマ編?? 620 nf.setMaximumFractionDigits(2); // ?小数部は?? 621 nf.setMinimumFractionDigits(0); // できれば、整数表示 622 623 setObject( "MIN." + key,nf.format( minNum ) ); // Double.toString( minNum ) の代わり? 624 setObject( "MAX." + key,nf.format( maxNum ) ); 625 setObject( "SUM." + key,nf.format( sumNum ) ); 626 setObject( "AVG." + key,nf.format( sumNum/cntSum ) ); 627 } 628 else { 629 setObject( "MIN." + key,nval( defaultVal , "" ) ); 630 setObject( "MAX." + key,nval( defaultVal , "" ) ); 631 setObject( "SUM." + key,nval( defaultVal , "" ) ); 632 setObject( "AVG." + key,nval( defaultVal , "" ) ); 633 } 634 } 635 else { 636 setObject( key, actionExec( action,value ) ); 637 } 638 } 639 else { 640 setObject( key, null ); // 5.6.6.1 (2013/07/12) value ?null の場? 641 } 642 } 643 644 /** 645 * ??スコープ??キャ?ュ??を?キーで取得します? 646 * 647 * @og.rev 3.1.0.1 (2003/03/26) 引数を与えて処?る様に変更する? 648 * 649 * @param key キー 650 * @param action アクション 651 * 652 * @return キーに対する?キャ?ュ?? 653 */ 654 private String getAttribute( final String key,final String action ) { 655 if( key == null || key.length() == 0 ) { 656 String errMsg = "key がセ?されて?せん? 657 + " command=" + command + " , action=" + action; // 5.1.8.0 (2010/07/01) errMsg 修正 658 throw new HybsSystemException( errMsg ); 659 } 660 661 String rtn = defaultVal; 662 Object obj = pageContext.findAttribute( key ); 663 if( obj != null ) { rtn = obj.toString(); } 664 665 return actionExec( action,rtn ); 666 } 667 668 /** 669 * ??スコープ??キャ?ュ??を削除します? 670 * 671 * @og.rev 3.1.0.1 (2003/03/26) 引数を与えて処?る様に変更する? 672 * 673 * @param key キー 674 */ 675 private void removeAttribute( final String key ) { 676 if( key == null || key.length() == 0 ) { 677 String errMsg = "key がセ?されて?せん? 678 + " command=" + command ; // 5.1.8.0 (2010/07/01) errMsg 修正 679 throw new HybsSystemException( errMsg ); 680 } 681 removeObject( key ); 682 } 683 684 /** 685 * セ?ョン/アプリケーションスコープ?キャ?ュ??をクリアします? 686 * 687 * こ?クリアは、キーの前方??で、大?小文字?区別をせずにクリアします? 688 * また?キー?null の場合??X_" で始めるもの以外?すべての値をクリアします? 689 * また????エンジン?で使用して?キーは、ここではクリアできません? 690 * 691 * @og.rev 3.1.0.1 (2003/03/26) クリアコマンド?追?? 692 * @og.rev 4.3.4.0 (2008/12/01) PageContextのスコープをクラス変数としてアクセス 693 * 694 * @param key キー 695 */ 696 private void clearAttribute( final String key ) { 697 698 String lowKey = null; 699 if( key != null ) { lowKey = key.toLowerCase(Locale.JAPAN); } 700 701 Enumeration<String> ekeys = pageContext.getAttributeNamesInScope( PageContext.APPLICATION_SCOPE ); // 4.3.3.6 (2008/11/15) Generics警告対? 702 while ( ekeys.hasMoreElements() ) { 703 // String ekey = String.valueOf( ekeys.nextElement() ).toLowerCase(Locale.JAPAN); 704 String ekey = ekeys.nextElement().toLowerCase(Locale.JAPAN); // 4.3.3.6 (2008/11/15) Generics警告対? 705 if( ( ! ekey.startsWith( "h_") && ! ekey.startsWith( "x_") ) && 706 ( lowKey == null || ekey.startsWith( key ) ) ) { 707 pageContext.removeAttribute( ekey, PageContext.APPLICATION_SCOPE ) ; 708 } 709 } 710 711 ekeys = pageContext.getAttributeNamesInScope( PageContext.SESSION_SCOPE ); 712 while ( ekeys.hasMoreElements() ) { 713 String ekey = String.valueOf( ekeys.nextElement() ).toLowerCase(Locale.JAPAN); 714 if( ( ! ekey.startsWith( "h_") && ! ekey.startsWith( "x_") ) && 715 ( lowKey == null || ekey.startsWith( key ) ) ) { 716 pageContext.removeAttribute( ekey, PageContext.SESSION_SCOPE ) ; 717 } 718 } 719 } 720 721 /** 722 * ??スコープ??キャ?ュ??を???SQL?り作?します? 723 * 724 * @og.rev 3.1.0.1 (2003/03/26) 引数を与えて処?る様に変更する? 725 * @og.rev 3.2.4.0 (2003/06/12) マルチデータ(?件検索)を使用するかしな?? 726 * @og.rev 3.8.6.0 (2006/08/07) nullSet="true"(初期値)の時?、検索結果がゼロ件時に "" をセ?する? 727 * @og.rev 3.8.9.2 (2007/07/28) action="ROW_APPEND" 追? 728 * @og.rev 4.3.7.5 (2009/07/13) ACT_LIST、ACT_ALL_LIST アクションの追? 729 * @og.rev 5.1.8.0 (2010/07/01) isNullSet 属? ? 730 * @og.rev 5.5.0.3 (2012/03/12) ACT_MAP アクションの追? 731 * @og.rev 5.6.4.3 (2013/05/24) tmpSelectedAll 属?追??action="ALL_xxx"?tmpSelectedAll="true" に置き換えます? 732 * 733 * @param table DBTableModelオブジェク? 734 */ 735 private void setSQLAttribute( final DBTableModel table ) { 736 if( table == null ) { // 3.8.6.0 (2006/08/07) 737 return; 738 } 739 740 int clmCnt = table.getColumnCount(); 741 int rowCnt = table.getRowCount(); 742 String sqlkey ; 743 String sqlval ; 744 String sufix = ""; 745 746 if( ACT_ROW_APPEND.equals( action ) ) { 747 for( int clm = 0; clm < clmCnt; clm++ ) { 748 StringBuilder buf = new StringBuilder(); 749 for( int row=0; row<rowCnt; row++ ) { 750 sqlval = table.getValue( row, clm ); 751 if( row > 0 ) { buf.append( separator ); } 752 buf.append( sqlval ); 753 } 754 sqlkey = table.getColumnName( clm ); 755 setObject( sqlkey , buf.toString() ); 756 } 757 } 758 // 4.3.7.5 (2009/07/13) ACT_LIST、ACT_ALL_LIST アクションの追? 759 // else if( ACT_ALL_LIST.equals( action ) || ACT_LIST.equals( action ) ) { 760 else if( ACT_LIST.equals( action ) ) { 761 for( int clm = 0; clm < clmCnt; clm++ ) { 762 ArrayList<String> list = new ArrayList<String>(); 763 for( int row=0; row<rowCnt; row++ ) { 764 sqlval = table.getValue( row, clm ); 765 list.add( sqlval ); 766 } 767 sqlkey = table.getColumnName( clm ); 768 setObject( sqlkey , list ); 769 } 770 } 771 // 5.5.0.3 (2012/03/12) ACT_MAP アクションの追? 772 // else if( ACT_ALL_MAP.equals( action ) || ACT_MAP.equals( action ) ) { 773 else if( ACT_MAP.equals( action ) ) { 774 if( clmCnt < 2 ) { 775 String errMsg = "action=MAP 時には、カラ???つ以上?です?カラ?=[" + clmCnt + "]"; 776 throw new IllegalArgumentException( errMsg ); 777 } 778 for( int row=0; row<rowCnt; row++ ) { 779 sqlkey = table.getValue( row, 0 ); // 0番目カラ?キー 780 sqlval = table.getValue( row, 1 ); // 1番目カラ?値 781 setObject( sqlkey , sqlval ); 782 } 783 } 784 else { 785 // 5.1.8.0 (2010/07/01) isNullSet 属? ? 786 // if( isNullSet && rowCnt == 0 ) { 787 if( rowCnt == 0 ) { 788 if( useMultiRows ) { sufix = "0" ; } 789 for( int clm = 0; clm < clmCnt; clm++ ) { 790 sqlkey = table.getColumnName( clm ); 791 sqlval = ""; 792 setObject( sqlkey + sufix, sqlval ); 793 } 794 } 795 else { 796 for( int row=0; row<rowCnt; row++ ) { 797 if( useMultiRows ) { sufix = String.valueOf( row ) ; } 798 for( int clm = 0; clm < clmCnt; clm++ ) { 799 sqlkey = table.getColumnName( clm ); 800 sqlval = table.getValue( row, clm ); 801 setObject( sqlkey + sufix, sqlval ); 802 } 803 if( ! useMultiRows ) { break; } 804 } 805 } 806 } 807 } 808 809 /** 810 * ??SQL??結果を文字?として画面に出力します? 811 * 画面に出力される?は???で2?以降?無視されます? 812 * 813 * @og.rev 5.1.7.0 (2010/06/01) SQLGET対? 814 * 815 * @param table DBTableModelオブジェク? 816 * 817 * @return SQL??結果?? 818 */ 819 private String getSQLAttribute( final DBTableModel table ) { 820 if( table == null ) { // 3.8.6.0 (2006/08/07) 821 return ""; 822 } 823 824 int rowCnt = table.getRowCount(); 825 final String rtn; 826 if( ACT_ROW_APPEND.equals( action ) ) { 827 StringBuilder buf = new StringBuilder(); 828 for( int row=0; row<rowCnt; row++ ) { 829 if( row > 0 ) { buf.append( separator ); } 830 buf.append( table.getValue( row, 0 ) ); 831 } 832 rtn = buf.toString(); 833 } 834 else if ( rowCnt == 0 ) { 835 rtn = ""; 836 } 837 else { 838 rtn = table.getValue( 0, 0 ); 839 } 840 841 return rtn; 842 } 843 844 /** 845 * ??スコープ??キャ?ュ??に、DBTableModel の選択された値を登録します? 846 * 847 * ?選択行が存在する場合?、?頭行を処?ます?ただし?action="APPEND"の 848 * 場合?、separator属?で?された?を使用して??結します? 849 * 850 * @og.rev 3.1.0.1 (2003/03/26) 新規作? 851 * @og.rev 3.5.6.5 (2004/08/09) ACT_APPEND 時?処?更 852 * @og.rev 3.6.1.0 (2005/01/05) ACT_ALL_APPEND アクションの追? 853 * @og.rev 4.3.7.5 (2009/07/13) ACT_LIST、ACT_ALL_LIST アクションの追? 854 * @og.rev 5.1.6.0 (2010/05/01) ALL_APPENDで選択行がな??合に処?れな?グを修正 855 * @og.rev 5.5.0.3 (2012/03/12) ACT_MAP アクションの追? 856 * @og.rev 5.6.4.3 (2013/05/24) ACT_MAX_MIN,ACT_ALL_MAX_MIN アクションの追? 857 * @og.rev 5.6.4.3 (2013/05/24) tmpSelectedAll 属?追??action="ALL_xxx"?tmpSelectedAll="true" に置き換えます? 858 * 859 * @param table DBTableModelオブジェク? 860 * @param key キー 861 * @param action アクション 862 */ 863 private void setTableAttribute( final DBTableModel table,final String key,final String action ) { 864 if( table == null || table.getRowCount() == 0 || table.getColumnCount() == 0 ) { return ; } 865 866 int[] rowNo = getParameterRows(); 867 // 5.1.6.0 (2010/05/01) 868 // if( rowNo.length == 0 ) { return ; } 869 // if( rowNo.length == 0 && !ACT_ALL_APPEND.equals( action ) ) { return; } 870 if( rowNo.length == 0 ) { return; } // 5.6.4.3 (2013/05/24) tmpSelectedAll 属?を追?た?で?件判定が使える? 871 872 final String[] keys ; 873 if( key == null || key.length() == 0 ) { 874 keys = table.getNames(); 875 } 876 else { 877 keys = new String[] { key } ; 878 } 879 880 // 5.6.4.3 (2013/05/24) tmpSelectedAll で、ロジ?の共通化 881 if( ACT_APPEND.equals( action ) ) { 882 for( int i=0; i<keys.length; i++ ) { 883 int clm = table.getColumnNo( keys[i] ); 884 StringBuilder val = new StringBuilder(); 885 val.append( table.getValue( rowNo[0],clm ) ); 886 for( int j=1; j<rowNo.length; j++ ) { 887 val.append( separator ); 888 val.append( table.getValue( rowNo[j],clm ) ); 889 } 890 setObject( keys[i],val.toString() ); 891 } 892 } 893 // // 3.6.1.0 (2005/01/05) ACT_ALL_APPEND アクションの追? 894 // else if( ACT_ALL_APPEND.equals( action ) ) { 895 // int size = table.getRowCount(); 896 // for( int i=0; i<keys.length; i++ ) { 897 // int clm = table.getColumnNo( keys[i] ); 898 // StringBuilder val = new StringBuilder(); 899 // val.append( table.getValue( 0,clm ) ); 900 // for( int row=1; row<size; row++ ) { // コピ?注意?separator の append の関係で、row=1 から開? 901 // val.append( separator ); 902 // val.append( table.getValue( row,clm ) ); 903 // } 904 // setObject( keys[i],val.toString() ); 905 // } 906 // } 907 // 5.5.0.3 (2012/03/12) ACT_MAP アクションの追? 908 else if( ACT_MAP.equals( action ) ) { 909 int keyClm = table.getColumnNo( key ,false ); 910 int valClm = table.getColumnNo( value ,false ); 911 912 if( keyClm < 0 ) { keyClm = 0; } // キーとなるカラ??されて???合?、最初?カラ? 913 if( valClm < 0 ) { valClm = 1; } // 値となるカラ??されて???合??番目のカラ? 914 915 for( int j=0; j<rowNo.length; j++ ) { 916 String mapkey = table.getValue( rowNo[j], keyClm ); 917 String mapval = table.getValue( rowNo[j], valClm ); 918 setObject( mapkey , mapval ); 919 } 920 } 921 // // 5.5.0.3 (2012/03/12) ACT_ALL_MAP アクションの追? 922 // else if( ACT_ALL_MAP.equals( action ) ) { 923 // int keyClm = table.getColumnNo( key ,false ); 924 // int valClm = table.getColumnNo( value ,false ); 925 // 926 // if( keyClm < 0 ) { keyClm = 0; } // キーとなるカラ??されて???合?、最初?カラ? 927 // if( valClm < 0 ) { valClm = 1; } // 値となるカラ??されて???合??番目のカラ? 928 // 929 // int size = table.getRowCount(); 930 //// for( int row=1; row<size; row++ ) { 931 // for( int row=0; row<size; row++ ) { // 5.6.4.3 (2013/05/24) なぜか、row=1 から始まって?? 932 // String mapkey = table.getValue( row, keyClm ); 933 // String mapval = table.getValue( row, valClm ); 934 // setObject( mapkey , mapval ); 935 // } 936 // } 937 // 4.3.7.5 (2009/07/13) ACT_LIST アクションの追? 938 else if( ACT_LIST.equals( action ) ) { 939 for( int i=0; i<keys.length; i++ ) { 940 int clm = table.getColumnNo( keys[i] ); 941 ArrayList<String> list = new ArrayList<String>(); 942 for( int j=0; j<rowNo.length; j++ ) { 943 list.add( table.getValue( rowNo[j],clm ) ); 944 } 945 setObject( keys[i],list ); 946 } 947 } 948 // // 4.3.7.5 (2009/07/13) ACT_ALL_LIST アクションの追? 949 // else if( ACT_ALL_LIST.equals( action ) ) { 950 // int size = table.getRowCount(); 951 // for( int i=0; i<keys.length; i++ ) { 952 // int clm = table.getColumnNo( keys[i] ); 953 // ArrayList<String> list = new ArrayList<String>(); 954 // for( int row=0; row<size; row++ ) { 955 // list.add( table.getValue( row,clm ) ); 956 // } 957 // setObject( keys[i],list ); 958 // } 959 // } 960 // 5.6.4.3 (2013/05/24) ACT_MAX_MIN アクションの追? 961 else if( ACT_MAX_MIN.equals( action ) ) { 962 NumberFormat nf = null; 963 for( int i=0; i<keys.length; i++ ) { 964 int clm = table.getColumnNo( keys[i] ); 965 DBColumn clmObj = table.getDBColumn( clm ); 966 String clsNm = clmObj.getClassName(); // NUMBER,INTEGER,DECIMAL が数字型? 967 968 boolean numFlag = "NUMBER,INTEGER,DECIMAL".indexOf( clsNm ) >= 0 ; // 数字型:true 969 970 String minVal = null ; 971 String maxVal = null ; 972 double minNum = Double.MAX_VALUE ; 973 double maxNum = Double.MIN_VALUE ; 974 double sumNum = 0d ; 975 int cntSum = 0; // 平?算に有効な件数 976 977 for( int j=0; j<rowNo.length; j++ ) { 978 String val = table.getValue( rowNo[j],clm ); 979 if( val != null && val.length() > 0 ) { 980 // 数字として比? 981 if( numFlag ) { 982 double tmp = Double.parseDouble( val ); 983 if( minNum > tmp ) { minNum = tmp; minVal = val; } 984 if( maxNum < tmp ) { maxNum = tmp; maxVal = val; } 985 sumNum += tmp ; cntSum++ ; 986 } 987 else { 988 // ??として比? 989 if( minVal == null || minVal.compareTo( val ) > 0 ) { minVal = val; } // ??の??タは、?セ?する? 990 if( maxVal == null || maxVal.compareTo( val ) < 0 ) { maxVal = val; } // ??の??タは、?セ?する? 991 } 992 } 993 } 994 if( minVal == null ) { minVal = nval( defaultVal , "" ); } // ?まで値が決まらなければ?"(空??) にする? 995 if( maxVal == null ) { maxVal = nval( defaultVal , "" ); } // ?まで値が決まらなければ?"(空??) にする? 996 setObject( "MIN." + keys[i],minVal ); 997 setObject( "MAX." + keys[i],maxVal ); 998 999 // SUM と AVG は、数字型の場合?みセ?します? 1000 if( cntSum > 0 ) { 1001 if( nf == null ) { 1002 nf = NumberFormat.getInstance(); 1003 nf.setGroupingUsed( false ); // カンマ編?? 1004 nf.setMaximumFractionDigits(2); // ?小数部は?? 1005 nf.setMinimumFractionDigits(0); // できれば、整数表示 1006 } 1007 setObject( "SUM." + keys[i],nf.format( sumNum ) ); // Double.toString( sumNum ) の代わり? 1008 setObject( "AVG." + keys[i],nf.format( sumNum/cntSum ) ); 1009 } 1010 else { 1011 setObject( "SUM." + keys[i],nval( defaultVal , "" ) ); 1012 setObject( "AVG." + keys[i],nval( defaultVal , "" ) ); 1013 } 1014 } 1015 } 1016 // // 5.6.4.3 (2013/05/24) ACT_ALL_MAX_MIN アクションの追? 1017 // else if( ACT_ALL_MAX_MIN.equals( action ) ) { 1018 // int size = table.getRowCount(); 1019 // for( int i=0; i<keys.length; i++ ) { 1020 // int clm = table.getColumnNo( keys[i] ); 1021 // DBColumn clmObj = table.getDBColumn( clm ); 1022 // String clsNm = clmObj.getClassName(); // NUMBER,INTEGER,DECIMAL が数字型? 1023 // 1024 // boolean numFlag = "NUMBER,INTEGER,DECIMAL".indexOf( clsNm ) >= 0 ; // 数字型:true 1025 // 1026 // String minVal = null ; 1027 // String maxVal = null ; 1028 // double minNum = Double.MAX_VALUE ; 1029 // double maxNum = Double.MIN_VALUE ; 1030 // double sumNum = 0d ; 1031 // int cntSum = 0; // 平?算に有効な件数 1032 // 1033 // for( int row=0; row<size; row++ ) { 1034 // String val = table.getValue( row,clm ); 1035 // if( val != null && val.length() > 0 ) { 1036 // // 数字として比? 1037 // if( numFlag ) { 1038 // double tmp = Double.parseDouble( val ); 1039 // if( minNum > tmp ) { minNum = tmp; minVal = val; } 1040 // if( maxNum < tmp ) { maxNum = tmp; maxVal = val; } 1041 // sumNum += tmp ; cntSum++ ; 1042 // } 1043 // else { 1044 // // ??として比? 1045 // if( minVal == null || minVal.compareTo( val ) > 0 ) { minVal = val; } // ??の??タは、?セ?する? 1046 // if( maxVal == null || maxVal.compareTo( val ) < 0 ) { maxVal = val; } // ??の??タは、?セ?する? 1047 // } 1048 // } 1049 // } 1050 // if( minVal == null ) { minVal = nval( defaultVal , "" ); } // ?まで値が決まらなければ?"(空??) にする? 1051 // if( maxVal == null ) { maxVal = nval( defaultVal , "" ); } // ?まで値が決まらなければ?"(空??) にする? 1052 // setObject( "MIN." + keys[i],minVal ); 1053 // setObject( "MAX." + keys[i],maxVal ); 1054 // 1055 // // SUM と AVG は、数字型の場合?みセ?します? 1056 // if( cntSum > 0 ) { 1057 // NumberFormat nf = NumberFormat.getInstance(); 1058 // nf.setGroupingUsed( false ); // カンマ編?? 1059 // nf.setMaximumFractionDigits(2); // ?小数部は?? 1060 // nf.setMinimumFractionDigits(0); // できれば、整数表示 1061 // 1062 // setObject( "SUM." + keys[i],nf.format( sumNum ) ); // Double.toString( sumNum ) の代わり? 1063 // setObject( "AVG." + keys[i],nf.format( sumNum/cntSum ) ); 1064 // } 1065 // else { 1066 // setObject( "SUM." + keys[i],nval( defaultVal , "" ) ); 1067 // setObject( "AVG." + keys[i],nval( defaultVal , "" ) ); 1068 // } 1069 // } 1070 // } 1071 else { 1072 for( int i=0; i<keys.length; i++ ) { 1073 int clm = table.getColumnNo( keys[i] ); 1074 setAttribute( keys[i],table.getValue( rowNo[0],clm ),action ); 1075 } 1076 } 1077 } 1078 1079 /** 1080 * DBTableModel の選択された値を取得します? 1081 * 1082 * ?選択行が存在する場合?、?頭行を処?ます?ただし?action="APPEND"の 1083 * 場合?、separator属?で?された?を使用して??結します? 1084 * 1085 * @og.rev 3.1.0.1 (2003/03/26) 新規作? 1086 * @og.rev 3.5.6.5 (2004/08/09) ACT_APPEND 時?処?更 1087 * @og.rev 3.6.1.0 (2005/01/05) ACT_ALL_APPEND アクションの追? 1088 * @og.rev 5.1.6.0 (2010/05/01) ALL_APPENDで選択行がな??合に処?れな?グを修正 1089 * @og.rev 5.6.4.3 (2013/05/24) tmpSelectedAll 属?追??action="ALL_xxx"?tmpSelectedAll="true" に置き換えます? 1090 * 1091 * @param table DBTableModelオブジェク? 1092 * @param key キー 1093 * @param action アクション 1094 * 1095 * @return DBTableModelの選択された値 1096 */ 1097 private String getTableAttribute( final DBTableModel table,final String key,final String action ) { 1098 if( table == null ) { 1099 String errMsg = "table がセ?されて?せん? 1100 + " command=" + command + " , action=" + action 1101 + " , key=" + key ; // 5.1.8.0 (2010/07/01) errMsg 修正 1102 throw new HybsSystemException( errMsg ); 1103 } 1104 1105 if( key == null || key.length() == 0 ) { 1106 String errMsg = "key がセ?されて?せん? 1107 + " command=" + command + " , action=" + action; // 5.1.8.0 (2010/07/01) errMsg 修正 1108 throw new HybsSystemException( errMsg ); 1109 } 1110 1111 int[] rowNo = getParameterRows(); 1112 // 5.1.6.0 (2010/05/01) 1113 // if( rowNo.length == 0 ) { return "" ; } 1114 // if( rowNo.length == 0 && !ACT_ALL_APPEND.equals( action ) ) { return "" ; } 1115 if( rowNo.length == 0 ) { return "" ; } // 5.6.4.3 (2013/05/24) tmpSelectedAll 属?を追?た?で?件判定が使える? 1116 1117 // 3.6.1.0 (2005/01/05) ACT_ALL_APPEND アクションの追? 1118 int clm = table.getColumnNo( key ); 1119 if( ACT_APPEND.equals( action ) ) { 1120 StringBuilder val = new StringBuilder(); 1121 val.append( table.getValue( rowNo[0],clm ) ); 1122 for( int j=1; j<rowNo.length; j++ ) { 1123 val.append( separator ); 1124 val.append( table.getValue( rowNo[j],clm ) ); 1125 } 1126 return val.toString() ; 1127 } 1128 // else if( ACT_ALL_APPEND.equals( action ) ) { 1129 // StringBuilder val = new StringBuilder(); 1130 // val.append( table.getValue( 0,clm ) ); 1131 // int size = table.getRowCount(); 1132 // for( int row=1; row<size; row++ ) { 1133 // val.append( separator ); 1134 // val.append( table.getValue( row,clm ) ); 1135 // } 1136 // return val.toString() ; 1137 // } 1138 else { 1139 return actionExec( action,table.getValue( rowNo[0],clm ) ); 1140 } 1141 } 1142 1143 /** 1144 * ??スコープ??キャ?ュ??に、DBTableModel の選択された値を登録します? 1145 * 1146 * これは、key で?したカラ??値をキーとして、value で?したカラ??値? 1147 * value 値として設定します? 1148 * setTableAttribute が?カラ?横持ち)??タを??る?に対して? 1149 * ロウ(縦持ち)??タを??ることが?来ます? 1150 * 1151 * @og.rev 3.1.0.1 (2003/03/26) 新規作? 1152 * @og.rev 3.3.3.3 (2003/08/06) key ??がデータの値になって?。バグ修正? 1153 * @og.rev 3.5.6.5 (2004/08/09) ACT_APPEND 時?処?更 1154 * 1155 * @param table DBTableModelオブジェク? 1156 * @param key キー 1157 * @param value 値 1158 * @param action アクション 1159 */ 1160 private void setKeyTableAttribute( final DBTableModel table,final String key,final String value,final String action ) { 1161 if( table == null ) { return ; } 1162 1163 if( key == null || key.length() == 0 ) { 1164 String errMsg = "key がセ?されて?せん? 1165 + " command=" + command + " , action=" + action 1166 + " , value=" + value ; // 5.1.8.0 (2010/07/01) errMsg 修正 1167 throw new HybsSystemException( errMsg ); 1168 } 1169 1170 int[] rowNo = getParameterRows(); 1171 if( rowNo.length == 0 ) { return ; } 1172 1173 final int[] valClm ; 1174 if( value == null || value.length() == 0 ) { 1175 String[] vals = table.getNames(); 1176 valClm = new int[vals.length]; 1177 for( int i=0; i<vals.length; i++ ) { 1178 valClm[i] = table.getColumnNo( vals[i] ); 1179 } 1180 } 1181 else { 1182 valClm = new int[] { table.getColumnNo( value ) } ; 1183 } 1184 1185 // 3.3.3.3 (2003/08/06) key ??がデータの値になって?。バグ修正? 1186 // 3.5.6.5 (2004/08/09) ロジ?変更 1187 for( int j=0; j<rowNo.length; j++ ) { 1188 String rowKey = key + j ; 1189 if( ACT_APPEND.equals( action ) ) { 1190 StringBuilder val = new StringBuilder(); 1191 val.append( table.getValue( rowNo[j],valClm[0] ) ); 1192 for( int i=1; i<valClm.length; i++ ) { 1193 val.append( separator ); 1194 val.append( table.getValue( rowNo[j],valClm[i] ) ); 1195 } 1196 setObject( rowKey,val.toString() ); 1197 } 1198 else { 1199 setAttribute( rowKey,table.getValue( rowNo[j],valClm[0] ),action ); 1200 } 1201 } 1202 } 1203 1204 /** 1205 * 表示??タの HybsSystem.ROW_SEL_KEY を?に?ばれた 行を処??対象とします? 1206 * 1207 * action="FIRST" 処?、tmpSelectedAll 属?追?伴???、Override します? 1208 * 1209 * @og.rev 3.1.0.1 (2003/03/26) 新規作? 1210 * @og.rev 4.0.0.0 (2005/01/31) メイン処?、super class で対? 1211 * @og.rev 3.8.0.4 (2005/08/08) action="FIRST" 機?の追? 1212 * @og.rev 5.6.4.3 (2013/05/24) tmpSelectedAll 属?の追?伴??全件選択状態???タを作?します? 1213 * 1214 * @return 選択行?配? 1215 */ 1216 @Override 1217 protected int[] getParameterRows() { 1218 final int[] rowNo ; 1219 // 3.8.0.4 (2005/08/08) action="FIRST" 機?の追? 1220 if( ACT_FIRST.equals( action ) ) { 1221 // return new int[] { 0 }; 1222 rowNo = new int[] { 0 }; 1223 } 1224 // 5.6.4.3 (2013/05/24) tmpSelectedAll 属?の追? 1225 else if( tmpSelectedAll ) { 1226 int rowCnt = table.getRowCount(); 1227 rowNo = new int[ rowCnt ]; 1228 for( int i=0; i<rowCnt; i++ ) { 1229 rowNo[i] = i; 1230 } 1231 } 1232 else { 1233 // return super.getParameterRows() ; 1234 rowNo = super.getParameterRows() ; 1235 } 1236 return rowNo ; 1237 } 1238 1239 /** 1240 * 【TAG】sessionから取得す?DBTableModelオブジェクト? ID? 1241 * 1242 * @og.tag 1243 * 初期値は、HybsSystem.TBL_MDL_KEY です? 1244 * 1245 * @og.rev 3.1.0.1 (2003/03/26) DBTableModelの値をSET/GETできる command , action を追?? 1246 * 1247 * @param id sessionに登録する時? ID 1248 */ 1249 public void setTableId( final String id ) { 1250 tableId = nval( getRequestParameter( id ),tableId ); 1251 } 1252 1253 /** 1254 * 【TAG】コマン?SET,GET,REMOVE,SQL,SETTBL,GETTBL,KEYTBL,CLEAR,SETMEM)をセ?しま?初期値:SET)? 1255 * 1256 * @og.tag 1257 * コマンド?,HTMLから(get/post)?されます?で,CMD_xxx で設定される 1258 * フィールド定数値の?れかを??できます? 1259 * 何も設定されな??また?、null の場合??SET" が?期?にセ?されます? 1260 * 1261 * CLEAR 以外?すべての処??、指定?スコープ??キャ?ュ??に対して行われます? 1262 * <table border="1" frame="box" rules="all" > 1263 * <th><td>command </td><td>名称 </td><td>機?</td></th> 1264 * <tr><td>SET </td><td>セ? </td><td>??キーに、value値を登録します?</td></tr> 1265 * <tr><td>GET </td><td>ゲ? </td><td>??キーの値を画面に出力します?</td></tr> 1266 * <tr><td>REMOVE </td><td>リ??? </td><td>??キーの値を削除します?</td></tr> 1267 * <tr><td>CLEAR </td><td>クリア </td><td>セ?ョン/アプリケーションスコープ?キャ?ュ??をクリアします?</td></tr> 1268 * <tr><td>SQL </td><td>??? </td><td>??SQL??実行結果を?カラ?をキーとして設定します?</td></tr> 1269 * <tr><td>SQLGET </td><td>???ゲ? </td><td>??SQL??実行結果を?画面に出力します?(2?以降?無視されま??/td></tr> 1270 * <tr><td>SETTBL </td><td>セ???ブル </td><td>??キーに、DBTableModel の選択されたカラ?横持ち)の値を登録します?</td></tr> 1271 * <tr><td>GETTBL </td><td>ゲ???ブル </td><td>??キーに、DBTableModel の選択されたカラ?横持ち)の値を画面に出力します?</td></tr> 1272 * <tr><td>KEYTBL </td><td>キー??ブル </td><td>??キーに、DBTableModel の選択されたロウ(縦持ち)の値を登録します?</td></tr> 1273 * <tr><td>SETMEM </td><td>セ?メモリ </td><td>??キーに、value値を?部キャ?ュに登録します?</td></tr> 1274 * </table> 1275 * 1276 * @og.rev 3.1.0.1 (2003/03/26) ??コマンド以外?、エラーとするように変更? 1277 * @og.rev 3.5.6.2 (2004/07/05) ??の連結にStringBuilderを使用します? 1278 * 1279 * @param cmd コマン?public static final 宣?れて???) 1280 * @see <a href="{@docRoot}/constant-values.html#org.opengion.hayabusa.taglib.ValueTag.CMD_GET">コマンド定数</a> 1281 */ 1282 public void setCommand( final String cmd ) { 1283 command = nval( getRequestParameter( cmd ),command ).toUpperCase(Locale.JAPAN); 1284 1285 if( !check( command, COMMAND_LIST ) ) { 1286 StringBuilder errMsg = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 1287 errMsg.append( "??コマンド?実行できません。コマンドエラー" ); 1288 errMsg.append( HybsSystem.CR ); 1289 errMsg.append( "command=[" ).append( command ).append( "] " ); 1290 errMsg.append( HybsSystem.CR ); 1291 for( int i=0; i<COMMAND_LIST.length; i++ ) { 1292 errMsg.append( " | " ); 1293 errMsg.append( COMMAND_LIST[i] ); 1294 } 1295 errMsg.append( " | " ); 1296 throw new HybsSystemException( errMsg.toString() ); 1297 } 1298 } 1299 1300 /** 1301 * 【TAG】アクション(UPPER,LOWER,MESSAGE,APPEND,ALL_APPEND,MAP,ALL_MAP,LIST,ALL_LIST,DAY_WEEK,MERGE,FIRST,ROW_APPEND,REPLACE,SUBSTR,SPLIT,MAX_MIN,ALL_MAX_MIN)をセ?します? 1302 * 1303 * @og.tag 1304 * アクションは,HTMLから(get/post)?されます?で,ACT_xxx で設定される 1305 * フィールド定数値の?れかを??できます? 1306 * 無??場合?、なにもしません? 1307 * 1308 * <table border="1" frame="box" rules="all" > 1309 * <tr><th>action </th><th>名称 </th><th>機?</th></tr> 1310 * <tr><td>UPPER </td><td>ア?ー(大?化) </td><td>value値を大?に変換します?</td></tr> 1311 * <tr><td>LOWER </td><td>ローワー(小文字化) </td><td>value値を小文字に変換します?</td></tr> 1312 * <tr><td>MESSAGE </td><td>メ?ージ変換 </td><td>引数をメ?ージリソースのキーとして、メ?ージ変換します?</td></tr> 1313 * <tr><td>APPEND </td><td>??タアペン? </td><td>?リクエストや?選択時に値を?結します?</td></tr> 1314 * <tr><td>ALL_APPEND </td><td>オールアペン?</td><td>SETTBL,GETTBL 時に、チェ?行以外?全行を対象に値の連結を行います?</td></tr> 1315 * <tr><td>MAP </td><td>マッ? </td><td>検索結果やTableModelのkeyをキーに、value?を値に?設定します?</td></tr> 1316 * <tr><td>ALL_MAP </td><td>オールマッ? </td><td>全行を対象に検索結果やTableModelのkeyをキーに、value?を値に?設定します?</td></tr> 1317 * <tr><td>LIST </td><td>リス? </td><td>?リクエストや?選択時に値をArrayListにセ?します?</td></tr> 1318 * <tr><td>ALL_LIST </td><td>オールリス? </td><td>全行を対象に値をArrayListにセ?します?</td></tr> 1319 * <tr><td>DAY_WEEK </td><td>日付前方まるめ </td><td>日付型??(YYYYMMDD) の値を?月曜日に変換します?</td></tr> 1320 * <tr><td> </td><td> </td><td>?日が日曜日の場合?、次の日(月曜日)に進めます?そ?他???始めに戻します?</td></tr> 1321 * <tr><td>MERGE </td><td>??タのマ?ジ </td><td>重?除く?ユニ?クな値に、?ージします?(カンマで?、separatorで合?)</td></tr> 1322 * <tr><td>FIRST </td><td>?件目取? </td><td>??の?件目を強制?選択状態にして、??行います?</td></tr> 1323 * <tr><td>ROW_APPEND </td><td>検索結果の連? </td><td>検索結果の行方向???タを?結します?</td></tr> 1324 * <tr><td>REPLACE </td><td>??置? </td><td>value の値から、指定された正規表現(from)の部?字?を?部?字?(to)で置換します?</td></tr> 1325 * <tr><td>SUBSTR </td><td>部?字? </td><td>value の値から、指定された(from)から(to)の部?字?を作?します?</td></tr> 1326 * <tr><td>SPLIT </td><td>??? </td><td>value の値から、指定されたseparatorで?した??を作?します?(key+0??番)</td></tr> 1327 * <tr><td>MAX_MIN </td><td>?_?? </td><td>選択行?keyのカラ????,?値を?MIN.キー、MAX.キー の値にセ?します?※??/td></tr> 1328 * <tr><td>ALL_MAX_MIN </td><td>?_?? </td><td>全行を対象にkeyのカラ????,?値を?MIN.キー、MAX.キー の値にセ?します?※??/td></tr> 1329 * </table> 1330 * 1331 * ※??MAX_MIN,ALL_MAX_MIN につ?は、DBTableModelのカラ??CLS_NAMEが?NUMBER,INTEGER,DECIMAL の場合?、数字型(double)に変換して比?ます? 1332 * 数字型(double)の場合だけ?合?SUM.キー) と 平?AVG.キー)計算も同時に行います? 1333 * それ以外?場合?、文字?比?行います???ommand="SETTBL" のみ?? 1334 * command="SET" の場合?、数字型(double)として、value の値を?separator で?した?で、最大、最小?合計?平?を計算し? 1335 * それぞれを?MIN.キー、MAX.キー、SUM.キー、AVG.キー 変数にセ?します? 1336 * 数字に変換できなかった?合?、エラーになります? 1337 * null は、無視さ?平?求める?合?母数としても無?、すべて?nulll の場合?、ゼロ??("")になります? 1338 * ゼロ??("") の場合に、defaultVal 属?が設定されて?と、defaultVal が設定されます? 1339 * 1340 * @og.rev 3.1.0.1 (2003/03/26) ??アクション以外?、エラーとするように変更? 1341 * @og.rev 3.5.6.2 (2004/07/05) ??の連結にStringBuilderを使用します? 1342 * @og.rev 4.3.7.5 (2009/07/13) ACT_LIST、ACT_ALL_LIST アクションの追?JavaDocのみ修正) 1343 * @og.rev 5.6.4.3 (2013/05/24) ACTMAX_MIN アクションの追?JavaDocのみ修正) 1344 * @og.rev 5.6.4.3 (2013/05/24) tmpSelectedAll 属?追?ともな?正。action="ALL_xxx"は、tmpSelectedAll=true にします? 1345 * 1346 * @param act アクション(public static final 宣?れて???) 1347 * @see <a href="{@docRoot}/constant-values.html#org.opengion.hayabusa.taglib.ValueTag.ACT_APPEND">アクション定数</a> 1348 */ 1349 public void setAction( final String act ) { 1350 action = nval( getRequestParameter( act ),action ); 1351 1352 if( action != null && !check( action, ACTION_LIST ) ) { 1353 StringBuilder errMsg = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 1354 errMsg.append( "??アクションは実行できません。アクションエラー" ); 1355 errMsg.append( HybsSystem.CR ); 1356 errMsg.append( "action=[" ).append( action ).append( "] " ); 1357 errMsg.append( HybsSystem.CR ); 1358 for( int i=0; i<ACTION_LIST.length; i++ ) { 1359 errMsg.append( " | " ); 1360 errMsg.append( ACTION_LIST[i] ); 1361 } 1362 errMsg.append( " | " ); 1363 throw new HybsSystemException( errMsg.toString() ); 1364 } 1365 1366 // 5.6.4.3 (2013/05/24) tmpSelectedAll 属?追??action="ALL_xxx"?tmpSelectedAll="true" に置き換えます? 1367 if( action != null && action.startsWith( "ALL_" ) ) { 1368 action = action.substring( 4 ); // "ALL_" の?文字?削除 1369 tmpSelectedAll = true; 1370 } 1371 } 1372 1373 /** 1374 * 【TAG】リクエスト情報 に登録するキーをセ?します? 1375 * 1376 * @og.tag リクエスト情報 に登録するキーをセ?します? 1377 * 1378 * @og.rev 3.0.1.3 (2003/03/11) キー?toUpperCase して??を削除 1379 * 1380 * @param key1 リクエスト情報に登録するキー 1381 */ 1382 public void setKey( final String key1 ) { 1383 key = nval( getRequestParameter( key1 ),key ) ; 1384 if( key == null ) { 1385 String errMsg = "key がセ?されて?せん? 1386 + " command=" + command + " , action=" + action; // 5.1.8.0 (2010/07/01) errMsg 修正 1387 throw new HybsSystemException( errMsg ); 1388 } 1389 } 1390 1391 /** 1392 * 【TAG】リクエスト情報 に登録する値をセ?します? 1393 * 1394 * @og.tag リクエスト情報 に登録する値をセ?します? 1395 * 1396 * @og.rev 3.1.7.0 (2003/05/02) isNullSet 属??true(初期値)のとき?、リクエスト情報から値を取得? 1397 * @og.rev 3.5.4.0 (2003/11/25) getRequestParameter( value ) メソ??setValue に移動? 1398 * @og.rev 5.1.8.0 (2010/07/01) isNullSet 属? ? 1399 * 1400 * @param val リクエスト情報に登録する値 1401 */ 1402 public void setValue( final String val ) { 1403 inValue = val; // 3.5.4.0 (2003/11/25) 入力変数も?キープしておく? 1404 value = getRequestParameter( inValue ); 1405 } 1406 1407 /** 1408 * 【TAG】value値がNULLの場合に、この初期値を設定します? 1409 * 1410 * @og.tag 1411 * value値がNULLの場合に、この初期値をセ?します? 1412 * 1413 * @param val 初期値 1414 */ 1415 public void setDefaultVal( final String val ) { 1416 defaultVal = getRequestParameter( val ); 1417 } 1418 1419 /** 1420 * 【?】value ?NULL の時に、設定するかど?[true/false]を指定しま?初期値:true)? 1421 * 1422 * @og.tag 1423 * true の場合?, null のときでもセ?します? 1424 * false の場合?, null のとき?、既存?値を置き換えません? 1425 * 初期値は、null のときでもセ?するです? ("true") 1426 * 1427 * @og.rev 5.1.8.0 (2010/07/01) isNullSet 属? ? 1428 * 1429 * @param flag NULL の時に設定するかど? [true:設定す?それ以?設定しない] 1430 * @deprecated 5.1.8.0 (2010/07/01) ?? 1431 */ 1432 @Deprecated public void setNullSet( final String flag ) { 1433 // isNullSet = nval( getRequestParameter( flag ),isNullSet ); 1434 } 1435 1436 /** 1437 * 【TAG?通常は使?せん)Queryオブジェクトを作?する時?DB接続IDを指定します? 1438 * 1439 * @og.tag Queryオブジェクトを作?する時?DB接続IDを指定します? 1440 * 1441 * @param id ??タベ?ス接続ID 1442 */ 1443 public void setDbid( final String id ) { 1444 dbid = nval( getRequestParameter( id ),dbid ); 1445 } 1446 1447 /** 1448 * 【TAG】キャ?ュする場合?スコー?request,session)を指定しま?初期値:request)? 1449 * 1450 * @og.tag 1451 * "request","session" が指定できます? 1452 * 初期値は?"request" です? 1453 * 1454 * @param scp スコー? 1455 */ 1456 @Override 1457 public void setScope( final String scp ) { 1458 scope = nval( getRequestParameter( scp ),scope ); 1459 } 1460 1461 /** 1462 * 【TAG】DBTableModel から取得する?合?スコー?request,session)を指定しま?初期値:session)? 1463 * 1464 * @og.tag 1465 * "request","session" が指定できます? 1466 * 初期値は?"session" です? 1467 * 1468 * @og.rev 5.1.2.0 (2010/01/01) DBTableModel の取得?のscope 1469 * 1470 * @param scp スコー? 1471 */ 1472 public void setTblScope( final String scp ) { 1473 tblScope = nval( getRequestParameter( scp ),tblScope ); 1474 } 1475 1476 /** 1477 * 【??未使用)アクションの処?ラメータを設定します? 1478 * 1479 * @og.tag アクションの処?ラメータを設定します? 1480 * 1481 * @og.rev 3.1.0.1 (2003/03/26) パラメーター属?の追?? 1482 * @og.rev 5.6.4.3 (2013/05/24) 未使用なので削除 1483 * 1484 * @param param パラメータ 1485 */ 1486 // public void setParameter( final String param ) { 1487 // parameter = nval( getRequestParameter( param ),parameter ); 1488 // } 1489 1490 /** 1491 * 【TAG】?ルチデータ(?件検索)を使用するかど?[true/false]を指定しま?初期値:false)? 1492 * 1493 * @og.tag 1494 * command="SQL" の場合に、?行検索した結果を?キー?行番号 と?キーを作?して 1495 * 値を設定するかど?を指定します? 1496 * false の場合?、従来どおり、検索カラ?がキーになります? 1497 * 初期値は、false です? 1498 * 1499 * @og.rev 3.2.4.0 (2003/06/12) 新規追? 1500 * 1501 * @param flag ?件検索 [true:使用する/false:使用しない] 1502 */ 1503 public void setUseMultiRows( final String flag ) { 1504 useMultiRows = nval( getRequestParameter( flag ),useMultiRows ); 1505 } 1506 1507 /** 1508 * 【TAG】各種アクションの??を???する?区??をセ?しま?初期値:",")? 1509 * 1510 * @og.tag 1511 * ?アクションに基づく??おいて、文字?の区?を指定する?に使用します? 1512 * APPEND?del>ALL_APPEND?/del>ROW_APPEND 時には、文字?の連結に使用します? 1513 * MERGE の場合?、カンマで?後?こ?セパレータでMERGE処?行い、?び??結します? 1514 * 初期値は?," に設定されて?す? 1515 * 1516 * @og.rev 3.5.6.5 (2004/08/09) 新規追? 1517 * 1518 * @param sepa ?区???初期値:",") 1519 */ 1520 public void setSeparator( final String sepa ) { 1521 separator = nval( getRequestParameter( sepa ),separator ); 1522 } 1523 1524 /** 1525 * 【TAG】リクエスト情報の HTMLTag開?終??><) 存在チェ?を実施するかど?[true/false]を設定しま? 1526 * (初期値:USE_XSS_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_XSS_CHECK}])? 1527 * 1528 * @og.tag 1529 * クロスサイトスクリプティング(XSS)対策??としてless/greater than signにつ?のチェ?を行います? 1530 * (><) が含まれて?エラーにする(true)?かノ?チェ??false)を指定します? 1531 * (初期値:シス?定数のUSE_XSS_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_XSS_CHECK}])? 1532 * 1533 * @og.rev 5.1.7.0 (2010/06/01) 新規追? 1534 * 1535 * @param flag XSSチェ? [true:する/false:しない] 1536 * @see org.opengion.hayabusa.common.SystemData#USE_XSS_CHECK 1537 */ 1538 public void setXssCheck( final String flag ) { 1539 xssCheck = nval( getRequestParameter( flag ),xssCheck ); 1540 } 1541 1542 /** 1543 * 【TAG】部?字?置換? 置換え前?部?字?(from)を指定します? 1544 * 1545 * @og.tag 1546 * value の値から、指定された正規表現(from)に??する、この??の??字?に対し? 1547 * ?された??(to)で置換します? 1548 * value.replaceAll( from, to ) と??で処?ます? 1549 * 1550 * @og.rev 5.2.2.0 (2010/11/01) 新規追? 1551 * 1552 * @param from 置換え前?部?字? 1553 * @see #setToVal(String) 1554 */ 1555 public void setFromVal( final String from ) { 1556 fromVal = nval( getRequestParameter( from ),fromVal ); 1557 } 1558 1559 /** 1560 * 【TAG】部?字?置換? 置換え後?部?字?(to)を指定します? 1561 * 1562 * @og.tag 1563 * value の値から、指定された正規表現(from)に??する、この??の??字?に対し? 1564 * ?された??(to)で置換します? 1565 * value.replaceAll( from, to ) と??で処?ます? 1566 * 1567 * @og.rev 5.2.2.0 (2010/11/01) 新規追? 1568 * 1569 * @param to 置換え後?部?字? 1570 * @see #setFromVal(String) 1571 */ 1572 public void setToVal( final String to ) { 1573 toVal = nval( getRequestParameter( to ),toVal ); 1574 } 1575 1576 /** 1577 * シリアライズ用のカスタ?リアライズ書き込みメソ? 1578 * 1579 * @og.rev 4.0.0.0 (2006/09/31) 新規追? 1580 * @serialData 1581 * 1582 * @param strm ObjectOutputStreamオブジェク? 1583 */ 1584 private void writeObject( final ObjectOutputStream strm ) throws IOException { 1585 strm.defaultWriteObject(); 1586 } 1587 1588 /** 1589 * シリアライズ用のカスタ?リアライズ読み込みメソ? 1590 * 1591 * ここでは、transient 宣?れた?変数の??初期化が?なフィールド?み設定します? 1592 * 1593 * @og.rev 4.0.0.0 (2006/09/31) 新規追? 1594 * @serialData 1595 * 1596 * @param strm ObjectInputStreamオブジェク? 1597 * @see #release2() 1598 */ 1599 private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException { 1600 strm.defaultReadObject(); 1601 } 1602 1603 /** 1604 * こ?オブジェクト???表現を返します? 1605 * 基本???目?使用します? 1606 * 1607 * @og.rev 4.3.4.0 (2008/12/01) PageContextのスコープをクラス変数としてアクセス 1608 * @og.rev 5.1.8.0 (2010/07/01) isNullSet 属? ? 1609 * 1610 * @return こ?クラスの??表現 1611 */ 1612 @Override 1613 public String toString() { 1614 String rtnStr = org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 1615 .println( "VERSION" ,VERSION ) 1616 .println( "tableId" ,tableId ) 1617 .println( "command" ,command ) 1618 .println( "key" ,key ) 1619 .println( "inValue" ,inValue ) 1620 .println( "value" ,value ) 1621 .println( "defaultVal" ,defaultVal ) 1622 .println( "action" ,action ) 1623 // .println( "isNullSet" ,isNullSet ) 1624 .println( "dbid" ,dbid ) 1625 .println( "scope" ,scope ) 1626 .println( "separator" ,separator ) 1627 // .println( "parameter" ,parameter ) 5.6.4.3 (2013/05/24) 未使用なので削除 1628 .println( "useMultiRows" ,useMultiRows ) 1629 .println( "COMMAND_LIST" ,COMMAND_LIST ) 1630 .println( "ACTION_LIST" ,ACTION_LIST ) 1631 .println( "Other..." ,getAttributes().getAttribute() ) 1632 .fixForm().toString() ; 1633 1634 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 1635 rtn.append( HybsSystem.CR ).append( "====================================" ).append( HybsSystem.CR ); 1636 1637 rtn.append( "APPLICATION_SCOPE:" ).append( HybsSystem.CR ); 1638 1639 Enumeration<String> ekeys = pageContext.getAttributeNamesInScope( PageContext.APPLICATION_SCOPE ); // 4.3.3.6 (2008/11/15) Generics警告対? 1640 while ( ekeys.hasMoreElements() ) { 1641 // String ekey = String.valueOf( ekeys.nextElement() ); 1642 String ekey = ekeys.nextElement(); // 4.3.3.6 (2008/11/15) Generics警告対? 1643 rtn.append( " key=[" ).append( ekey ).append( "] " ); 1644 rtn.append( "value=[" ).append( pageContext.getAttribute( ekey,PageContext.APPLICATION_SCOPE ) ).append( "]" ); 1645 rtn.append( HybsSystem.CR ); 1646 } 1647 1648 rtn.append( "SESSION_SCOPE:" ).append( HybsSystem.CR ); 1649 ekeys = pageContext.getAttributeNamesInScope( PageContext.SESSION_SCOPE ); 1650 while ( ekeys.hasMoreElements() ) { 1651 String ekey = String.valueOf( ekeys.nextElement() ); 1652 rtn.append( " key=[" ).append( ekey ).append( "] " ); 1653 rtn.append( "value=[" ).append( pageContext.getAttribute( ekey,PageContext.SESSION_SCOPE ) ).append( "]" ); 1654 rtn.append( HybsSystem.CR ); 1655 } 1656 1657 rtn.append( "REQUEST_SCOPE:" ).append( HybsSystem.CR ); 1658 ekeys = pageContext.getAttributeNamesInScope( PageContext.REQUEST_SCOPE ); 1659 while ( ekeys.hasMoreElements() ) { 1660 String ekey = String.valueOf( ekeys.nextElement() ); 1661 rtn.append( " key=[" ).append( ekey ).append( "] " ); 1662 rtn.append( "value=[" ).append( pageContext.getAttribute( ekey,PageContext.REQUEST_SCOPE ) ).append( "]" ); 1663 rtn.append( HybsSystem.CR ); 1664 } 1665 1666 rtn.append( "PAGE_SCOPE:" ).append( HybsSystem.CR ); 1667 ekeys = pageContext.getAttributeNamesInScope( PageContext.PAGE_SCOPE ); 1668 while ( ekeys.hasMoreElements() ) { 1669 String ekey = String.valueOf( ekeys.nextElement() ); 1670 rtn.append( " key=[" ).append( ekey ).append( "] " ); 1671 rtn.append( "value=[" ).append( pageContext.getAttribute( ekey,PageContext.PAGE_SCOPE ) ).append( "]" ); 1672 rtn.append( HybsSystem.CR ); 1673 } 1674 rtn.append( "====================================" ).append( HybsSystem.CR ); 1675 1676 return rtnStr + rtn.toString(); 1677 } 1678 }