001    /*
002     * Copyright (c) 2009 The openGion Project.
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     *     http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013     * either express or implied. See the License for the specific language
014     * governing permissions and limitations under the License.
015     */
016    package org.opengion.hayabusa.taglib;
017    
018    import org.opengion.hayabusa.common.HybsSystem;
019    import org.opengion.hayabusa.common.HybsSystemException;
020    import org.opengion.hayabusa.db.DBTableModel;
021    import org.opengion.hayabusa.db.TableFilter;
022    import org.opengion.fukurou.db.Transaction;
023    import org.opengion.fukurou.db.TransactionReal;
024    import org.opengion.fukurou.util.ErrorMessage;
025    import org.opengion.fukurou.util.StringUtil;
026    import static org.opengion.fukurou.util.StringUtil.nval ;
027    
028    import java.io.ObjectOutputStream;
029    import java.io.ObjectInputStream;
030    import java.io.IOException;
031    import java.util.Map;
032    
033    /**
034     * TableFilter のサブクラスをCALLしてDBTableModelにアクセスするタグですã?
035     *
036     * DBTableModel ã‚?TableFilter のサブクラス(classIdでæŒ?®?に渡して処ç�?‚’実行しますã?
037     * クラスを作æ?する場合ã?、org.opengion.hayabusa.db.TableFilter インターフェースを継承した
038     * クラスにするå¿?¦�がありますã?またã?classId 属æ?には、シスãƒ?ƒ リソース で
039     * 設定しã�?TableFilter.XXXX の XXXX を指定しますã?
040     *
041     * BODY部åˆ??、SQLを記述する為ã�?�‘に使ってã�?�¾したがã?CSS定義形式ã?書式で、keys,vals を記述
042     * できるようにしますã?
043     * これは、下記ã?ようなパラメータをã?keys="KEY,KEY2,KEY3" vals='AAAA,"BB,CC,DD",EE' のような記述形式と
044     *   {
045     *        KEY1 : AAAA ;
046     *        KEY2 : BB,CC,DD ;
047     *        KEY3 : EE ;
048     *        ・・・・・・
049     *   }
050     * のような、CSS形式に類似の形式でも記述できるようにしましたã€?
051     * keys,vals と CSS定義形式パラメータを同時にæŒ?®šしたå?合ã?、両方とも有効ですã?
052     * ただしã?キーが重è¤?�—たå?合ã?、不定とè€?�ˆてくださいã€?
053     * 現時点では、CSS定義形式パラメータが優先されますが、これã?、単にå†?ƒ¨パラメータMapへの
054     * 登録é ?�Œ、CSS定義形式パラメータが後ã?為、上書きされるためですã?
055     *
056     * ※ こã?タグは、Transaction タグの対象ですã?
057     *
058     * @og.formSample
059     * ●形式ï¼?lt;og:tableFilter classId="…" />
060     * ●body?šあã‚?EVAL_BODY_BUFFERED:BODYを評価しã?{@XXXX} を解析しまã�?
061     *
062     * ●Tag定義??
063     *   <og:tableFilter
064     *       classId          ○ã?TAG】データベã?ス処ç�?‚’実行するクラスパスを指定しまã�?å¿??)ã€?
065     *       tableId            【TAGã€?通常は使ã�?�¾せん)DBTableModel sessionに登録されてã�?‚‹キーを指定しまã�?
066     *       modifyType         【TAG】データ処ç�??方æ³?A:追åŠ?C:更新 D:削除)を指定しまã�?
067     *       keys               【TAG】リンク先に渡すキーを指定しまã�?
068     *       vals               【TAG】keys属æ?に対応するå?をCSV形式でè¤?•°æŒ?®šしまã�?
069     *       selectedAll        【TAG】データをå?件選択済みとして処ç�?�™るかどã�?�‹[true/false]を指定しまã�?初期値:false)
070     *       stopZero           【TAG】検索結果が0件のときå?ç�?‚’続行するかどã�?�‹[true/false]を指定しまã�?初期値:false[続行する])
071     *       scope              【TAG】キャãƒ?‚·ュする場合ã?スコープ[request/page/session/applicaton]を指定しまã�?初期値:session)
072     *       dbid               【TAGã€?通常は使ã�?�¾せん)Queryオブジェクトを作æ?する時ã?DB接続IDを指定しまã�?
073     *       caseKey            【TAG】このタグ自体を利用するかどã�?�‹の条件キーを指定しまã�?初期値:null) 5.7.7.2 (2014/06/20)
074     *       caseVal            【TAG】このタグ自体を利用するかどã�?�‹の条件値を指定しまã�?初期値:null) 5.7.7.2 (2014/06/20)
075     *       caseNN             【TAG】指定ã?値がã?null/ゼロæ–?­—å? でなã�??å�?Not Null=NN)は、このタグは使用されまã�?初期値:true) 5.7.7.2 (2014/06/20)
076     *       caseNull           【TAG】指定ã?値がã?null/ゼロæ–?­—å? の場合ã?、このタグは使用されまã�?初期値:true) 5.7.7.2 (2014/06/20)
077     *       debug              【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
078     *   >   ... Body ...
079     *   </og:tableFilter>
080     *
081     * ●使用ä¾?
082     *    ・引数/プロシジャーを直接書くå?å�?
083     *    【entry.jspã€?
084     *        <og:tableFilter
085     *            classId     = "WL_LOGICSET"         :TableFilter のサブクラス(実行クラス)
086     *            tableId     = "WL0000"              :登録å…??DBTableModelのsession/request変数å†??取得キー
087     *            keys        = "AA,BB,CC"            :実行クラスへの引数のキー
088     *            vals        = "{@AA},{@BB},{@CC}"   :実行クラスへの引数の値
089     *            selectedAll = "false/true"          :処ç�?¯¾象の行を全行選択するかどã�?�‹(初期値:false)
090     *            modifyType  = "A/C/D"               :処ç�??方æ³?A:追åŠ?C:更新 D:削除)を指定しますã?初期値は自動ですã?
091     *        />
092     *
093     *    ・BODY部åˆ?�«、CSS形式ã?パラメータ??eys,vals?‰を記述するä¾?
094     *
095     *        <og:tableFilter
096     *            classId     = "WL_LOGICSET"         :TableFilter のサブクラス(実行クラス)
097     *            tableId     = "WL0000"              :登録å…??DBTableModelのsession/request変数å†??取得キー
098     *            selectedAll = "false/true"          :処ç�?¯¾象の行を全行選択するかどã�?�‹(初期値:false)
099     *            modifyType  = "A/C/D"               :処ç�??方æ³?A:追åŠ?C:更新 D:削除)を指定しますã?初期値は自動ですã?
100     *        >
101     *               {
102     *                   AA    :  {@AA}
103     *                   BB    :  {@BB}
104     *                   CC    :  {@CC}
105     *               }
106     *        </og:tableFilter>
107     *
108     * @og.group そã?ä»?
109     * @og.rev 3.8.5.0 (2006/03/20) 新規作æ?
110     *
111     * @version  0.9.0  2000/10/17
112     * @author   Kazuhiko Hasegawa
113     * @since    JDK1.1,
114     */
115    public class TableFilterTag extends CommonTagSupport {
116            //* こã?プログラãƒ??VERSIONæ–?­—å?を設定しますã?       {@value} */
117            private static final String VERSION = "5.7.7.2 (2014/06/20)" ;
118    
119            private static final long serialVersionUID = 577220140620L ;
120    
121            private static final String errMsgId    = HybsSystem.ERR_MSG_KEY;
122            private transient DBTableModel  table   = null;
123    
124            private String          tableId         = HybsSystem.TBL_MDL_KEY;
125            private String          classId         = null;
126            private String          modifyType      = null;
127            private String[]        keys            = null;
128            private String[]        vals            = null;
129    
130            private   String        dbid            = null ; // 4.2.4.0 (2008/06/23)
131            private   String        sql                     = null ; // 5.6.5.2 (2013/06/21) bodyからSQLæ–??みをå?りå?すã?
132            private   Map<String,String>  paramMap = null;    // 5.6.5.2 (2013/06/21) bodyからparamMapを取りだしã?
133    
134            private boolean         selectedAll     = false;
135            private boolean         stopZero        = false;        // 5.7.6.2 (2014/05/16) stopZero属æ?追åŠ?
136    
137            /**
138             * Taglibの開始タグが見つかったときに処ç�?�™ã‚?doStartTag() ã‚?オーバã?ライドしますã?
139             *
140             * @og.rev 5.7.7.2 (2014/06/20) caseKey,caseVal,caseNN,caseNull 属æ?を追åŠ?
141             *
142             * @return      後続å?ç�??æŒ?¤º( EVAL_BODY_BUFFERED )
143             */
144            @Override
145            public int doStartTag() {
146                    // 5.7.7.2 (2014/06/20) caseKey,caseVal,caseNN,caseNull 属æ?を追åŠ?
147                    if( !useTag() ) { return SKIP_BODY ; }
148    
149                    table = (DBTableModel)getObject( tableId );
150    
151                    if( keys != null && vals != null && keys.length != vals.length ) {
152                            String errMsg = "keys と vals の設定å?の数が異なりますã?: " + HybsSystem.CR
153                                                    + "keys.length=[" + keys.length + "] , "
154                                                    + "keys.length=[" + StringUtil.array2line( keys,"," ) + "]"
155                                                    + HybsSystem.CR
156                                                    + "vals.length=[" + vals.length + "] , "
157                                                    + "vals.length=[" + StringUtil.array2line( vals,"," ) + "]";
158                            throw new HybsSystemException( errMsg );
159                    }
160    
161                    startQueryTransaction( tableId );
162                    return EVAL_BODY_BUFFERED ;             // Body を評価する
163            }
164    
165            /**
166             * Taglibのタグ本体を処ç�?�™ã‚?doAfterBody() ã‚?オーバã?ライドしますã?
167             *
168             * @og.rev 5.6.5.2 (2013/06/21) bodyローカル化ã?sql、paramMap 追åŠ?
169             *
170             * @return      後続å?ç�??æŒ?¤º(SKIP_BODY)
171             */
172            @Override
173            public int doAfterBody() {
174                    String body = nval( getBodyString(),null );
175    
176                    // paramMapの取り出ã�?
177                    paramMap = StringUtil.cssParse( body );
178    
179                    // SQLæ–??åˆ?‚Š出ã�?classId="DBSELECT" の場合ã?みの処ç�?
180                    if( "DBSELECT".equalsIgnoreCase( classId ) && body != null ) {
181                            int ad1 = body.indexOf( '{' );
182                            int ad2 = body.indexOf( '}' );
183    
184                            if( ad1 >= 0 && ad2 >= 0 ) {
185                                    sql = body.substring( 0,ad1 ).trim() + body.substring( ad2+1 ).trim();
186                            }
187                            else {
188                                    sql = body.trim();
189                            }
190                    }
191    
192                    return SKIP_BODY ;
193            }
194    
195            /**
196             * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
197             *
198             * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得ã?為,ApplicationInfoオブジェクトを設å®?
199             * @og.rev 4.2.3.0 (2008/06/23) DBIDとボディー部åˆ??記述を下位クラスに渡す用に修正
200             * @og.rev 4.3.7.4 (2009/07/01) Resouceオブジェクトを下位クラスに渡す用に修正
201             * @og.rev 5.1.9.0 (2010/08/01) Transaction 対å¿?
202             * @og.rev 5.2.1.0 (2010/10/01) debugPrint() メソãƒ?ƒ‰の処ç�?�¡件見直ã�?
203             * @og.rev 5.3.7.0 (2011/07/01) TransactionReal の引数変更 、Transaction対応で、close処ç�?‚’入れるã€?
204             * @og.rev 5.6.5.2 (2013/06/21) bodyローカル化ã?sql、paramMap 追åŠ?
205             * @og.rev 5.7.6.2 (2014/05/16) table件数が変わるå?合ã?"DB.COUNT" キーでリクエストに再セãƒ?ƒˆするã€?
206             * @og.rev 5.7.7.2 (2014/06/20) caseKey,caseVal,caseNN,caseNull 属æ?を追åŠ?
207             *
208             * @return      後続å?ç�??æŒ?¤º
209             */
210            @Override
211            public int doEndTag() {
212                    // ãƒ?ƒ�ãƒ?‚°時には、オブジェクトå?部æƒ??を表示するã€?
213                    debugPrint();   // 5.2.1.0 (2010/10/01) debugPrint() メソãƒ?ƒ‰自体に、isDebug() がçµ?�¿込まれてã�?‚‹ã€?
214    
215                    // 5.7.7.2 (2014/06/20) caseKey,caseVal,caseNN,caseNull 属æ?を追åŠ?
216                    if( !useTag() ) { return EVAL_PAGE ; }
217    
218                    int rtnCode = EVAL_PAGE;        // try ??finally の関係で、変数化しておく
219    
220                    int[] rowNo = getParameterRows();
221    
222                    // 5.1.9.0 (2010/08/01) Transaction 対å¿?
223                    Transaction tran = null;
224                    final TableFilter filter ;
225                    // 5.3.7.0 (2011/07/01) Transaction対応で、close処ç�?‚’入れるã€?
226                    try {
227                            TransactionTag tranTag = (TransactionTag)findAncestorWithClass( this,TransactionTag.class );
228                            if( tranTag == null ) {
229                                    tran = new TransactionReal( getApplicationInfo() );             // 5.3.7.0 (2011/07/01) 引数変更
230                            }
231                            else {
232                                    tran = tranTag.getTransaction();
233                            }
234    
235                            // 5.7.6.2 (2014/05/16) table件数が変わるå?合ã?"DB.COUNT" キーでリクエストに再セãƒ?ƒˆするã€?
236                            int rowCnt1 = table == null ? -1 : table.getRowCount();
237    
238                            String cls = HybsSystem.sys( "TableFilter_" + classId );
239                            filter = (TableFilter)HybsSystem.newInstance( cls );
240    
241                            filter.setDBTableModel( table );
242                            filter.setParameterRows( rowNo );
243                            filter.setModifyType( modifyType );
244                            filter.setKeysVals( keys,vals );
245            //              filter.setApplicationInfo( getApplicationInfo() );      // 3.8.7.0 (2006/12/15)
246                            filter.setTransaction( tran );                                          // 5.1.9.0 (2010/08/01) Transaction 対å¿?
247                            filter.setDebug( isDebug() );
248                            filter.setDbid( dbid );                                 // 4.2.4.0 (2008/06/23)
249                            filter.setSql( sql );                                   // 5.6.5.2 (2013/06/21) sql 追åŠ?
250                            filter.setParamMap( paramMap );                 // 5.6.5.2 (2013/06/21) paramMap 追åŠ?
251                            filter.setResource( getResource() );    // 4.3.7.4 (2009/07/01)
252    
253                            table = filter.execute();
254    
255                            // 5.7.6.2 (2014/05/16) table件数が変わるå?合ã?"DB.COUNT" キーでリクエストに再セãƒ?ƒˆするã€?
256                            int rowCnt2 = table == null ? -1 : table.getRowCount();
257                            if( rowCnt1 != rowCnt2 ) {
258                                    setRequestAttribute( "DB.COUNT" , String.valueOf( rowCnt2 ) );
259                            }
260    
261                            int errCode = filter.getErrorCode();
262                            ErrorMessage errMessage = filter.getErrorMessage();
263    
264                            if( errCode >= ErrorMessage.NG )  {  // 異常
265                                    rtnCode = SKIP_PAGE;
266                            }
267    
268                            // 5.7.6.2 (2014/05/16) 件数?�件(またã?、table==null)かつ stopZero = true
269                            if( rowCnt2 <= 0 && stopZero ) { return SKIP_PAGE; }
270    
271                            String err = TaglibUtil.makeHTMLErrorTable( errMessage,getResource() );
272                            if( err != null && err.length() > 0 ) {
273                                    jspPrint( err );
274                                    setSessionAttribute( errMsgId,errMessage );
275                            }
276                            else {
277                                    removeSessionAttribute( errMsgId );
278                            }
279                    }
280                    finally {
281                            if( tran != null ) { tran.close(); }
282                    }
283    
284                    if( table != null && ! commitTableObject( tableId, table ) ) {
285                            rtnCode = SKIP_PAGE ;
286                    }
287    
288                    return rtnCode ;
289            }
290    
291            /**
292             * タグリブオブジェクトをリリースしますã?
293             * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
294             *
295             * @og.rev 5.6.5.2 (2013/06/21) bodyå»?­¢、sql、paramMap 追åŠ?
296             * @og.rev 5.7.6.2 (2014/05/16) stopZero属æ?追åŠ?
297             */
298            @Override
299            protected void release2() {
300                    super.release2();
301                    table           = null;
302                    tableId         = HybsSystem.TBL_MDL_KEY;
303                    classId         = null;
304                    modifyType      = null;
305                    keys            = null;
306                    vals            = null;
307                    selectedAll     = false;
308                    stopZero        = false;        // 5.7.6.2 (2014/05/16) stopZero属æ?追åŠ?
309                    dbid            = null;         // 4.2.4.0 (2008/06/23)
310                    sql                     = null;         // 5.6.5.2 (2013/06/21) bodyからSQLæ–??みをå?りå?すã?
311                    paramMap        = null;         // 5.6.5.2 (2013/06/21) bodyからparamMapを取りだすã?
312            }
313    
314            /**
315             * 表示ãƒ??タの HybsSystem.ROW_SEL_KEY をå?にã€?�¸ばれた 行を処ç�??対象としますã?
316             *
317             * @return      選択行ã?配å?
318             */
319            @Override
320            protected int[] getParameterRows() {
321                    final int[] rowNo ;
322                    if( selectedAll ) {
323                            int rowCnt = table.getRowCount();
324                            rowNo = new int[ rowCnt ];
325                            for( int i=0; i<rowCnt; i++ ) {
326                                    rowNo[i] = i;
327                            }
328                    } else {
329                            rowNo = super.getParameterRows();               // 4.0.0 (2005/01/31)
330                    }
331                    return rowNo;
332            }
333    
334            /**
335             * 【TAG】データベã?ス処ç�?‚’実行するクラスパスを指定しますã?
336             *
337             * @og.tag
338             * ここでæŒ?®šするクラスIDは、シスãƒ?ƒ リソース にて TableFilter の
339             * サブクラス(インターフェース継承)としてæŒ?®šするå¿?¦�がありますã?
340             *
341             * クラス自身は、org.opengion.hayabusa.db.TableFilter インターフェースを継承してã�?‚‹å¿?¦�がありますã?
342             * {@og.doc03Link tableFilter TableFilter_**** クラス}
343             *
344             * @param       id TableFilter インターフェースを継承してã�?‚‹実クラスの ID
345             * @see         org.opengion.hayabusa.db.TableFilter  TableFilter インターフェース
346             */
347            public void setClassId( final String id ) {
348                    classId = nval( getRequestParameter( id ),classId );
349            }
350    
351            /**
352             * 【TAGã€?通常は使ã�?�¾せん)結果のDBTableModelをã?sessionに登録するときã?キーを指定しまã�?
353             *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])ã€?
354             *
355             * @og.tag
356             * 検索結果より、DBTableModelオブジェクトを作æ?しますã?これをã?下流ã?viewタグ等に
357             * 渡すå?合にã€??常は、session を利用しますã?そã?場合ã?登録キーですã?
358             * query タグを同時に実行して、結果を求めるå?合ã?同ä¸?ƒ¡モリに配置される為ã€?
359             * こã? tableId 属æ?を利用して、メモリ空間をåˆ?�‘ますã?
360             *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])ã€?
361             *
362             * @param       id sessionに登録する時ã? ID
363             */
364            public void setTableId( final String id ) {
365                    tableId = nval( getRequestParameter( id ),tableId );
366            }
367    
368            /**
369             * 【TAG】データをå?件選択済みとして処ç�?�™るかどã�?�‹[true/false]を指定しまã�?初期値:false)ã€?
370             *
371             * @og.tag
372             * 全てのãƒ??タを選択済みãƒ??タとして扱って処ç�?�—ますã?
373             * 全件処ç�?�™るå?合に、指定しますã?(true/false)
374             * ãƒ?ƒ•ォルãƒ?false ですã?
375             *
376             * @param  all ãƒ??タをå?件選択済み [true:全件選択済み/false:通常]
377             */
378            public void setSelectedAll( final String all ) {
379                    selectedAll = nval( getRequestParameter( all ),selectedAll );
380            }
381    
382            /**
383             * 【TAG】検索結果が0件のときå?ç�?‚’続行するかどã�?�‹[true/false]を指定しまã�?初期値:false[続行する])ã€?
384             *
385             * @og.tag
386             * 初期値は、false(続行すã‚?ですã?
387             *
388             * @og.rev 5.7.6.2 (2014/05/16) 新規追åŠ?
389             *
390             * @param  cmd 検索結果が0件のときã?[true:処ç�?‚’中止する/false:続行する]
391             */
392            public void setStopZero( final String cmd ) {
393                    stopZero = nval( getRequestParameter( cmd ),stopZero );
394            }
395    
396            /**
397             * 【TAG】データ処ç�??方æ³?A:追åŠ?C:更新 D:削除)を指定しますã?
398             *
399             * @og.tag
400             * 通常は、DBTableModel に自動設定されてã�?‚‹ modifyType をå?に、データ処ç�?–¹法を
401             * 選別しますã?(A:追åŠ?C:更新 D:削除)
402             * こã?場合ã?行単位で modifyType の値を取得して判別するå¿?¦�がありますが、ä¸?ˆ¬には
403             * 処ç�?¯¾象は、å?件おなã�?modifyType である可能性が高いですã?
404             * またã?selectedAll などで強制çš?�«全件処ç�?¯¾象とする場合ã?、modifyType に値ã�?
405             * 設定さてã�?�¾せん。その様な場合に外部より modifyType を指定しますã?
406             * 初期値は、è?動判å®?ですã?
407             *
408             * @param  type ãƒ??タ処ç�??方æ³?A:追åŠ?C:更新 D:削除)
409             */
410            public void setModifyType( final String type ) {
411                    modifyType = nval( getRequestParameter( type ),modifyType );
412    
413                    if( modifyType != null && !"A".equals( modifyType ) && !"C".equals( modifyType ) && !"D".equals( modifyType ) ) {
414                            String errMsg = "modifyType は A:追åŠ?C:更新 D:削除 のどれかを指定してくださいã€? " + HybsSystem.CR
415                                                    + "modifyType=[" + modifyType + "]";
416                            throw new HybsSystemException( errMsg );
417                    }
418            }
419    
420            /**
421             * 【TAG】リンク先に渡すキーを指定しますã?
422             *
423             * @og.tag
424             * 戻る時に、検索時ã?キャãƒ?‚·ュにæŒ?®šした引数以外にæŒ?®šしたり、別の値に置き換えたã‚?
425             * する場合ã?キーを設定できますã?カンマ区åˆ?‚Šでè¤?•°æŒ?®šできますã?
426             * vals 属æ?には、キーに対応するå?をã?設定してくださいã€?
427             * åˆ?§£方法ã?、CSV変数をå?にåˆ?§£してから、getRequestParameter で値を取得しますã?
428             * こうしなã�?�¨ãƒ??タ自身にカンマを持ってã�?‚‹場合にåˆ?§£をミスる為ですã?
429             *
430             * @param       key リンク先に渡すキー
431             */
432            public void setKeys( final String key ) {
433                    keys = getCSVParameter( key );
434            }
435    
436            /**
437             * 【TAG】names属æ?に対応するå?をCSV形式でè¤?•°æŒ?®šしますã?
438             *
439             * @og.tag
440             * キーに設定したå?をã?カンマ区åˆ?‚Šæ–?­—でè¤?•°して出来ますã?
441             * æŒ?®šé?序ã?、キーと同じにしておいて下さã�??
442             * åˆ?§£方法ã?、CSV変数をå?にåˆ?§£してから、getRequestParameter で値を取得しますã?
443             * こうしなã�?�¨ãƒ??タ自身にカンマを持ってã�?‚‹場合にåˆ?§£をミスる為ですã?
444             *
445             * @param       val names属æ?に対応するå?
446             */
447            public void setVals( final String val ) {
448                    vals = getCSVParameter( val );
449            }
450    
451            /**
452             * 【TAGã€?通常は使ã�?�¾せん)Queryオブジェクトを作æ?する時ã?DB接続IDを指定しますã?
453             *
454             * @og.tag
455             * Queryオブジェクトを作æ?する時ã?DB接続IDを指定しますã?
456             * これは、シスãƒ?ƒ リソースで、DEFAULT_DB_URL 等でæŒ?®šしてã�?‚‹ ãƒ??タベã?ス接続å?
457             * æƒ??に、XX_DB_URL を定義することでã€?dbid="XX" とすると、この 接続å?を使用して
458             * ãƒ??タベã?スにアクセスできますã?
459             *
460             * @param       id ãƒ??タベã?ス接続ID
461             */
462            public void setDbid( final String id ) {
463                    dbid = nval( getRequestParameter( id ),dbid );
464            }
465    
466            /**
467             * シリアライズ用のカスタãƒ?‚·リアライズ書き込みメソãƒ?ƒ‰
468             *
469             * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
470             * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
471             *
472             * @param       strm    ObjectOutputStreamオブジェクãƒ?
473             * @throws IOException  入出力エラーが発生したå?å�?
474             */
475            private void writeObject( final ObjectOutputStream strm ) throws IOException {
476                    strm.defaultWriteObject();
477            }
478    
479            /**
480             * シリアライズ用のカスタãƒ?‚·リアライズ読み込みメソãƒ?ƒ‰
481             *
482             * ここでは、transient 宣è¨?�•れたå†?ƒ¨変数のå†??初期化がå¿?¦�なフィールドã?み設定しますã?
483             *
484             * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
485             * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
486             *
487             * @param       strm    ObjectInputStreamオブジェクãƒ?
488             * @see #release2()
489             * @throws IOException  シリアライズに関する入出力エラーが発生したå?å�?
490             * @throws ClassNotFoundException       クラスを見つけることができなかったå?å�?
491             */
492            private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
493                    strm.defaultReadObject();
494            }
495    
496            /**
497             * こã?オブジェクトã?æ–?­—å?表現を返しますã?
498             * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
499             *
500             * @return こã?クラスのæ–?­—å?表現
501             */
502            @Override
503            public String toString() {
504                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
505                                    .println( "VERSION"                     ,VERSION                )
506                                    .println( "tableId"                     ,tableId                )
507                                    .println( "classId"                     ,classId                )
508                                    .println( "modifyType"          ,modifyType             )
509                                    .println( "selectedAll"         ,selectedAll    )
510                                    .println( "keys"                        ,keys                   )
511                                    .println( "vals"                        ,vals                   )
512                                    .println( "dbid"                        ,dbid                   ) // 4.2.4.0 (2008/06/23)
513                                    .println( "sql"                         ,sql                    ) // 5.6.5.2 (2013/06/21)
514                                    .fixForm().toString() ;
515            }
516    }