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