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 }