001    /*
002     * Copyright (c) 2009 The openGion Project.
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     *     http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013     * either express or implied. See the License for the specific language
014     * governing permissions and limitations under the License.
015     */
016    package org.opengion.hayabusa.taglib;
017    
018    import static org.opengion.fukurou.util.StringUtil.nval;
019    
020    import java.util.Arrays;
021    import java.util.Enumeration;
022    import java.util.Locale;
023    import java.util.Set;
024    import java.util.TreeSet;
025    
026    import org.opengion.fukurou.util.ErrorMessage;
027    import org.opengion.fukurou.util.StringUtil;
028    import org.opengion.hayabusa.common.HybsSystem;
029    import org.opengion.hayabusa.common.HybsSystemException;
030    import org.opengion.hayabusa.db.DBColumn;
031    import org.opengion.hayabusa.db.DBTableModel;
032    
033    /**
034     * 登録ãƒ??ã‚¿ã®ç‰©ç?ƒã‚§ãƒ?‚¯(æ•´åˆæ?ãƒã‚§ãƒ?‚¯ã€nullãƒã‚§ãƒ?‚¯)を行ã†ã‚¿ã‚°ã§ã™ã?
035     *
036     * コマンドã«å¯¾å¿œã—ãŸãƒã‚§ãƒ?‚¯æ–¹å¼ã§ã€æŒ‡å®šã?カラãƒ?‚’ãƒã‚§ãƒ?‚¯ã—ã¾ã™ã?
037     * command="NEW" ã®å ´åˆã?ã€columns 引数ã«CSVå½¢å¼ã§æŒ?®šã—ãŸã‚«ãƒ©ãƒ?より
038     * リクエスト情報をå–å¾—ã—ã¦ã€å?ã‚’ãƒã‚§ãƒ?‚¯ã—ã¾ã™ã?
039     * 引数ãƒã‚§ãƒ?‚¯ã§ã¯ã€?%" ã‚?"_" ãªã©ã®ã‚ã„ã¾ã?¤œç´¢æ™‚ã«æŒ?®šã™ã‚‹è¨˜å·ã‚?
040     * å«ã‚?¨ã‚¨ãƒ©ãƒ¼ã«ãªã‚‹ã‚«ãƒ©ãƒ??ãƒã‚§ãƒ?‚¯å¯¾è±¡ã‹ã‚‰ã¯ãšã™å¿?¦ãŒã‚る為ã€?
041     * ãƒã‚§ãƒ?‚¯ã™ã¹ãカラãƒ?‚’æŒ?®šã™ã‚‹å¿?¦ãŒã‚りã¾ã™ã?
042     * command="ENTRY" ã®å ´åˆã?ã€columns 引数ã«ç„¡é–¢ä¿‚ã«ã€å?ã¦ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã•れãŸã‚«ãƒ©ãƒ?
043     * ã®å€¤ã‚’ãƒã‚§ãƒ?‚¯ã—ã¾ã™ã?ã“れã¯ã€å?ã®æ¤œç´¢æ™‚ã?å ´åˆã¨ç•°ãªã‚Šã?ENTRYã§ã¯
044     * ãƒ??タベã?スã«å€¤ã‚’設定ã™ã‚‹ç‚ºã€ç„¡æ¡ä»¶ã«ãƒã‚§ãƒ?‚¯ã™ã‚‹å¿?¦ãŒã‚りã¾ã™ã?
045     * nullCheck ã¯ã€command ã«ç„¡é–¢ä¿‚ã«æŒ?®šã?カラãƒ?Œ null (ゼロæ–?­—å?)ã‹ã©ã?‹ã‚?
046     * 判定ã—ã¾ã™ã?
047     * maxRowCount ã¯ã€ä¸?¦§æ¤œç´¢æ™‚ã?ãƒã‚§ãƒ?‚¯ã•れãŸä»¶æ•°ãŒã?æŒ?®šã?値をè¶?ˆãŸå?åˆã«
048     * エラーã«ãªã‚Šã¾ã™ã?minRowCount ã¯ã€åŒæ§˜ã«ã€æœ€å°é¸æŠžä»¶æ•°(設定å?ã‚’å«ã‚?ã®æŒ?®šã§ã™ã?
049     * ã“ã?ã‚¿ã‚°ã¯ã€ã‚¨ãƒ©ãƒ¼æ™‚ã«ã¯ã€ãれ以é™ã?JSPç”»é¢ã‚’評価ã—ã¾ã›ã‚“ã€?ODY 部ã«è¨˜è¿°ã•れã?
050     * 値ã¯ã€ã‚¨ãƒ©ãƒ¼æ™‚ã?ã¿è¡¨ç¤ºã•ã‚Œã€æ­£å¸¸æ™‚ã«ã¯ã€ãªã«ã‚‚表示ã•れã¾ã›ã‚“。ã“れã?ã€ã‚¨ãƒ©ãƒ¼æ™‚ã?
051     * メãƒ?‚»ãƒ¼ã‚¸ã‚??ユーザーã«ã‚¨ãƒ©ãƒ¼æ™‚ã?アクションを行ã£ã¦ã‚‚らã??åˆã?処ç?例ãˆã°ã€?
052     * ç”»é¢ã‚’戻る為ã®ãƒœã‚¿ãƒ³ãªã©)を表示ã•ã›ã¾ã™ã?
053     * useColumnLabel ã‚?true ã«ã‚»ãƒ?ƒˆã™ã‚‹ã¨ã€ã‚¨ãƒ©ãƒ¼æ™‚ã?カラãƒ?(ラベル)ã‚’ã?カラãƒ?‚ªãƒ–ジェクトã‹ã‚?
054     * å–å¾—ã™ã‚‹ã‚ˆã?«ãªã‚Šã¾ã™ã?動的カラãƒ?®Ÿè¡Œæ™‚ã‚??DBTableModelã«å¯¾ã—ã¦ã€ColumnEditorç­‰ã§
055     * ãƒ©ãƒ™ãƒ«ã‚’æ›¸ãæ›ãˆãŸå ´åˆã«ã€æœ‰åйã§ã™ã?false ã®å ´åˆã?ã€åŸºæœ¬çš?«ã¯ãƒ©ãƒ™ãƒ«ãƒªã‚½ãƒ¼ã‚¹ã‹ã‚‰ã®
056     * å–å¾—ã«ãªã‚Šã¾ã™ãŒã€ã‚±ãƒ¼ã‚¹ã«ã‚ˆã£ã¦ã¯ã€ã‚«ãƒ©ãƒ?‚ªãƒ–ジェクトã‹ã‚‰å–å¾—ã—ã¦ã?‚‹å ´åˆã‚‚ã‚りã¾ã™ã?
057     * ã“ã?属æ?ã¯ã€äº’æ›æ€§ã‚’é‡è¦–ã—ã€å?期å?ãŒã?false ã«ãªã£ã¦ã?¾ã™ã?
058     *
059     * command="MODIFY" , "DELETE" 時ã«ã¯ã€å¼·åˆ¶çš?«ã€minRowCount="1" ã§å‡¦ç?—ã¾ã™ã?
060     *
061     * @og.formSample
062     * â—å½¢å¼ï¼?lt;og:columnCheck command = "…" />
063     * â—å½¢å¼ï¼?lt;og:columnCheck command = "…" >エラー時ã?ã¿å‡¦ç?</og:columnCheck>
064     * â—body?šãªã?ã‚り
065     *
066     * â—Tag定義??
067     *   <og:columnCheck
068     *       command            ã€TAG】コマンド[NEW/RENEW/ENTRY]ã‚’ã‚»ãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:NEW)
069     *       columns            ã€TAG】ãƒã‚§ãƒ?‚¯ã™ã¹ãカラãƒ??をカンマ区åˆ?‚Š(CSVå½¢å¼?ã§æŒ?®šã—ã¾ã?
070     *       nullCheck          ã€TAG】NULL ãƒã‚§ãƒ?‚¯ã™ã¹ãカラãƒ??をカンマ区åˆ?CSVå½¢å¼?ã‚Šã§æŒ?®šã—ã¾ã?
071     *       mustAnyCheck       ã€TAGã€‘é¸æŠžå¿??カラãƒ?æŒ?®šã?カラãƒ??å†?œ€ä½Žã?ã¨ã¤ãŒNULLã§ãªã?ã‚?AA|BB|CC,XX|YY|ZZ" å½¢å¼ã§æŒ?®šã—ã¾ã?
072     *       checkType          ã€TAGã€?ãƒã‚§ãƒ?‚¯å¯¾è±¡ã®ãƒ??ã‚¿[AUTO/NEW/ENTRY]を指定ã—ã¾ã?åˆæœŸå€¤:AUTO)
073     *       maxRowCount        ã€TAG】ENTRY時ã«ãƒã‚§ãƒ?‚¯ã§é¸æŠžã•れãŸè¡Œæ•°ã®æœ?¤§å€¤ã‚’設定ã—ã¾ã?
074     *       minRowCount        ã€TAG】ENTRY時ã«ãƒã‚§ãƒ?‚¯ã§é¸æŠžã•れãŸè¡Œæ•°ã®æœ?°å?を設定ã—ã¾ã?
075     *       tableId            ã€TAGã€?通常ã¯ä½¿ã?¾ã›ã‚“) sessionã«ç™»éŒ²ã•れã¦ã?‚‹ DBTableModel ã‚’å–りå?ã™ã‚­ãƒ¼ã‚’指定ã—ã¾ã?
076     *       matchKeys          ã€TAG】正è¦è¡¨ç¾ã§ã®ãƒžãƒƒãƒãƒ³ã‚°ã‚’行ã†ã‚«ãƒ©ãƒ??をカンマ区åˆ?‚Š(CSVå½¢å¼?ã§æŒ?®šã—ã¾ã?
077     *       matchVals          ã€TAG】正è¦è¡¨ç¾ã§ã®ãƒžãƒƒãƒãƒ³ã‚°ã‚’行ã†ã‚«ãƒ©ãƒ??ã«å¯¾ã™ã‚‹å€¤(æ­£è¦è¡¨ç¾)をカンマ区åˆ?‚Š(CSVå½¢å¼?ã§æŒ?®šã—ã¾ã?
078     *       realTime           ã€TAGã€?通常使ã?¾ã›ã‚“)リアルタイãƒ?ƒã‚§ãƒ?‚¯ã‚’行ã†å ´åˆã«æœ‰åйã«ã—ã¾ã?
079     *       useStrict          ã€TAG】NEWã®å ´åˆã«ã€å޳å¯?«ãƒã‚§ãƒ?‚¯ã™ã‚‹ã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:false)
080     *       useColumnLabel     ã€TAG】カラãƒ?ƒ©ãƒ™ãƒ«ã‚’使用ã™ã‚‹ã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:false)
081     *       checkNames         ã€TAGã€‘ãƒªã‚¯ã‚¨ã‚¹ãƒˆå¤‰æ•°ã®æ­£è¦åŒ–を行ã†ã‚«ãƒ©ãƒ?‚’CSVå½¢å¼ã§è¤?•°æŒ?®šã—ã¾ã?
082     *       debug              ã€TAG】デãƒãƒƒã‚°æƒ??ã‚’å?力ã™ã‚‹ã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:false)
083     *   >   ... Body ...
084     *   </og:columnCheck>
085     *
086     * â—使用ä¾?
087     * <og:columnCheck
088     *     command = "{@command}"
089     *     columns = "AAA,BBB,CCC"  DB定義(DBColumnリソース)ã§å®šç¾©ã—ãŸé ?›®(æ¡æ•°,タイプç­?ã§ãƒã‚§ãƒ?‚¯ã—ã¾ã™ã?
090     *     maxRowCount = "1"        ãƒã‚§ãƒ?‚¯ã§é¸ã°ã‚ŒãŸ æœ?¤§é¸æŠžä»¶æ•°(設定å?ã‚’å«ã‚?を指定ã?
091     *     minRowCount = "1"        ãƒã‚§ãƒ?‚¯ã§é¸ã°ã‚ŒãŸ æœ?°é¸æŠžä»¶æ•°(設定å?ã‚’å«ã‚?を指定ã?
092     *     nullCheck = "AAA,CCC"    NULLãƒã‚§ãƒ?‚¯ã‚’実行ã—ã¾ã™ã?
093     * />
094     *
095     * [エラー時ã«ã€BODY部ã«è¨˜è¿°ã•れãŸå?容をå?力ã™ã‚‹ã?正常時ã«ã¯ã€ã“ã®BODY部ã®è¨˜è¿°ã¯å‡ºåŠ›ã•れã¾ã›ã‚“ã€?
096     * <og:columnCheck
097     *     command = "{@command}"
098     *     columns = "AAA,BBB,CCC"      DB定義(DBColumnリソース)ã§å®šç¾©ã—ãŸé ?›®(æ¡æ•°,タイプç­?ã§ãƒã‚§ãƒ?‚¯ã—ã¾ã™ã?
099     *     nullCheck = "AAA,CCC"        NULLãƒã‚§ãƒ?‚¯ã‚’実行ã—ã¾ã™ã?
100     * >
101     *     <form method="POST" action="forward.jsp" target="RESULT">
102     *         <og:input type="button" onClick="history.back()" msg="MSG0049" accesskey="R" td="false" />
103     *     </form>
104     * </og:columnCheck>
105     *
106     * mustAnyCheck 属æ?ã«ã€?¸æŠžå¿??カラãƒ?‚’æŒ?®šã—ã¾ã™ã?
107     *      例:mustAnyCheck="AA|BB|CC"
108     *          AA,BB,CC ã®ã‚«ãƒ©ãƒ?§é¸æŠžå¿??(ã™ã¹ã¦ãŒnullãªã‚‰ã‚¨ãƒ©ãƒ¼)
109     *      例:mustAnyCheck="AA|BB|CC,XX|YY|ZZ"
110     *          AA,BB,CC ã®ã‚»ãƒ?ƒˆã¨ã€XX,YY,ZZã®ã‚»ãƒ?ƒˆã§ãれãžã‚Œé¸æŠžå¿??ã€?
111     *      例:mustAnyCheck="AA|XX,AA|YY,AA|ZZ"
112     *          AA ã«å€¤ãŒã‚れã?ã™ã¹ã¦æˆç«‹ã?ãã†ã§ãªã??åˆã?ã€XX 㨠YY 㨠ZZ ãŒã™ã¹ã¦å¿??ã€?
113     *      例:mustAnyCheck="AA|BB,BB|CC,AA|CC"
114     *          AA,BB,CC ã®å†??ã©ã‚Œã‹?’ã¤ãŒå¿??ã€?AãŒæ?ç«‹ã™ã‚Œã?BBã‹CCãŒå¿??ã€‚åŒæ§˜ã«ã€?
115     *          BBãŒæ?ç«‹ã™ã‚Œã?ã€AAã‹CCãŒå¿??ã€?
116     *
117     *  例:query.jsp
118     *        <og:column name="AA" mustAny="true" />
119     *        <og:column name="BB" mustAny="true" />
120     *        <og:column name="XX" mustAny="XYZ"  />
121     *        <og:column name="YY" mustAny="XYZ"  />
122     *      result.jsp
123     *        <og:columnCheck mustAnyCheck="AA|BB,XX|YY" />
124     *      custom/custom.css
125     *          .XYZ { background-color: Green; }
126     *
127     *  ä¾?動的カラãƒ?§ã€entry.jsp ã§ã®ãƒã‚§ãƒ?‚¯ã‚’行ã†å ´åˆã?
128     *     entry.jsp
129     *        <og:columnCheck command="NEW" columns="*" useColumnLabel="true" />
130     *
131     *     useColumnLabel ã§ã€å‹•çš?«ä½œæ?ã•れãŸã‚«ãƒ©ãƒ?SAVE=TRUEã§ã‚­ãƒ£ãƒ?‚·ãƒ¥æ¸ˆã¿)を使ã£ã¦
132     *     ãƒã‚§ãƒ?‚¯ã—ã¾ã™ã?command="NEW" ãªã®ã§ã€å¯¾è±¡ã‚«ãƒ©ãƒ?‚’æŒ?®šã™ã‚‹ã?ã«ã€?*" ã§ã™ã¹ã¦ã‚’é¸æŠžã—ã¾ã™ã?
133     *
134     * @og.group ç”»é¢ç™»éŒ²
135     *
136     * @version  4.0
137     * @author   Kazuhiko Hasegawa
138     * @since    JDK5.0,
139     */
140    public class ColumnCheckTag extends CommonTagSupport {
141            //* ã“ã?プログラãƒ??VERSIONæ–?­—å?を設定ã—ã¾ã™ã?       {@value} */
142            private static final String VERSION = "5.4.4.0 (2012/02/01)" ;
143    
144            private static final long serialVersionUID = 544020120201L ;
145    
146            /** command å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?コマンãƒ? æ–°è¦?{@value} */
147            public static final String CMD_NEW      = "NEW" ;
148            /** command å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?コマンãƒ? 冿¤œç´¢ {@value}  */
149            public static final String CMD_RENEW = "RENEW" ;
150            /** command å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?コマンãƒ? エントリー {@value} */
151            public static final String CMD_ENTRY   = "ENTRY" ;
152            /** command å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?コマンãƒ?リスãƒ? */
153    
154            // 4.3.1.1 (2008/08/23) transient 追�
155            private transient DBTableModel table            = null;         // 4.1.2.1 (2008/03/13)
156    
157            private String          tableId         = HybsSystem.TBL_MDL_KEY;               // 3.5.4.3 (2004/01/05)
158            private String          command         = CMD_NEW;      // ç„¡æŒ?®šæ™‚ã¯ã€ãƒã‚§ãƒ?‚¯ã‚’行ã†ã€?
159            private String[]        columns         = null;
160            private String[]        nullCheck       = null;
161            private String[]        mustAnyCheck= null;             // 3.8.0.9 (2005/10/17)
162            private int                     maxRowCount     = -1 ;          // åˆæœŸå€¤ã¨ã—ã¦?Œç„¡åˆ¶é™ã‚’æŒ?®?
163            private int                     minRowCount     = -1 ;          // åˆæœŸå€¤ã¨ã—ã¦?Œç„¡åˆ¶é™ã‚’æŒ?®?
164            private String          checkType       = "AUTO";
165            private String          bodyString      = null;         // 3.5.4.2 (2003/12/15)
166            private String[]        matchKeys       = null;         // 4.0.0 (2005/11/30)
167            private String[]        matchVals       = null;         // 4.0.0 (2005/11/30)
168    //      private boolean         isViewSimple= false;    // 4.3.3.0 (2008/10/01)
169            private boolean         isRealTime      = false;        // 4.3.7.0 (2009/06/01)
170            private boolean         isStrict        = false;        // 5.2.2.0 (2010/11/01) NEWã®å ´åˆã«ã€å޳å¯?«ãƒã‚§ãƒ?‚¯ã™ã‚‹ãƒ•ラグを追åŠ?
171    
172            private boolean         isColumnLabel= false;   // 5.4.3.4 (2012/01/12) true ã®å ´åˆã«ã€ã‚«ãƒ©ãƒ?ƒ©ãƒ™ãƒ«ã‚’使用ã—ã¾ã™ã?
173    //      private boolean         isTblClmLbl = false;    // 5.4.3.4 (2012/01/12) true ã®å ´åˆã«ã€DBTableModelã®ã‚«ãƒ©ãƒ?‹ã‚‰ãƒ©ãƒ™ãƒ«ã‚’å–å¾—ã—ã¾ã™ã?
174    
175            private String                  checkNames      = null; // 5.4.3.8 (2012/01/24)
176    
177            /**
178             * Taglibã®é–‹å§‹ã‚¿ã‚°ãŒè¦‹ã¤ã‹ã£ãŸã¨ãã«å‡¦ç?™ã‚?doStartTag() ã‚?オーãƒã?ライドã—ã¾ã™ã?
179             *
180             * @og.rev 3.5.4.2 (2003/12/15) エラー時ã«ã€BODY部ã«è¨˜è¿°ã•れãŸå?容をå?力ã™ã‚‹ã?
181             * @og.rev 5.0.0.2 (2009/09/15) xss対å¿?>ãƒã‚§ãƒ?‚¯ã™ã‚‹
182             *
183             * @return      後続å?ç??æŒ?¤º( EVAL_BODY_BUFFERED )
184             */
185            @Override
186            public int doStartTag() {
187                    // 5.0.0.2 (2009/09/15) XSSãƒã‚§ãƒ?‚¯ã—ãªã?>ã™ã‚‹
188                    // useXssCheck( false );
189                    return ( EVAL_BODY_BUFFERED );          // Body を評価ã™ã‚‹
190            }
191    
192            /**
193             * Taglibã®ã‚¿ã‚°æœ¬ä½“を処ç?™ã‚?doAfterBody() ã‚?オーãƒã?ライドã—ã¾ã™ã?
194             *
195             * @og.rev 3.5.4.2 (2003/12/15) エラー時ã«ã€BODY部ã«è¨˜è¿°ã•れãŸå?容をå?力ã™ã‚‹ã?
196             *
197             * @return      後続å?ç??æŒ?¤º(SKIP_BODY)
198             */
199            @Override
200            public int doAfterBody() {
201                    bodyString = getBodyString();
202    
203                    return ( SKIP_BODY );
204            }
205    
206            /**
207             * Taglibã®çµ‚äº?‚¿ã‚°ãŒè¦‹ã¤ã‹ã£ãŸã¨ãã«å‡¦ç?™ã‚?doEndTag() ã‚?オーãƒã?ライドã—ã¾ã™ã?
208             *
209             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()ã§å‘¼ã¶ã€?
210             * @og.rev 3.4.0.3 (2003/09/10) command="NEW" ã§ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿæ™‚ã«ã¯ã€DBTableModel をクリアã™ã‚‹ã€?
211             * @og.rev 3.5.4.2 (2003/12/15) HTMLTableViewForm クラスå変更(â‡?ViewForm_HTMLTable)
212             * @og.rev 3.5.4.2 (2003/12/15) エラー時ã«ã€BODY部ã«è¨˜è¿°ã•れãŸå?容をå?力ã™ã‚‹ã?
213             * @og.rev 3.5.4.3 (2004/01/05) tableId 属æ?を追åŠ??
214             * @og.rev 3.5.4.4 (2004/01/16) ã‚¨ãƒ©ãƒ¼çµæžœã‚’表示ã™ã‚‹ãƒ??ブル形å¼ã?フォーãƒ?¿®æ­£
215             * @og.rev 3.5.5.2 (2004/04/02) TaglibUtil.makeHTMLErrorTable メソãƒ?ƒ‰ã‚’利用
216             * @og.rev 4.1.2.1 (2008/03/13) table 属æ?を追åŠ??
217             * @og.rev 4.3.3.0 (2008/10/01) viewSimple属æ?追åŠ?
218             * @og.rev 4.3.7.0 (2009/06/01) viewSimple属æ?å称変更 -> isRealTime
219             *
220             * @return      後続å?ç??æŒ?¤º
221             */
222            @Override
223            public int doEndTag() {
224                    debugPrint();           // 4.0.0 (2005/02/28)
225                    int rtnCode = EVAL_PAGE;
226    
227                    // 4.1.2.1 (2008/03/13)
228                    table = (DBTableModel)getObject( tableId );
229    
230                    // 3.4.0.3 (2003/09/10) コマンドãŒã€NEW,RENEW 以外ã?å ´åˆã?ã€DBTableModel ã¯å¿??ã€?
231                    if( !CMD_NEW.equals( command ) &&
232                            !CMD_RENEW.equals( command ) &&
233    //                      getObject( tableId ) == null ) {        // 3.5.4.3 (2004/01/05)
234                            table == null ) {                                       // 4.1.2.1 (2008/03/13)
235                                    String errMsg = "æ¤œç´¢çµæžœã®ã‚ªãƒ–ジェクトãŒå­˜åœ¨ã—ã¾ã›ã‚“ã€?
236                                                                    + " command=[" + command + "]" ;
237                                    jspPrint( errMsg );
238                                    rtnCode = SKIP_PAGE ;
239                    }
240                    else {
241                    // 3.5.5.2 (2004/04/02) TaglibUtil.makeHTMLErrorTable メソãƒ?ƒ‰ã‚’利用
242                            ErrorMessage errMsg = makeErrorDBTable();
243                            if( errMsg.getKekka() >= ErrorMessage.NG ) {
244                                    if( bodyString != null ) { jspPrint( bodyString ); }    // 3.5.4.2 (2003/12/15)
245    
246                                    // 4.3.3.0 (2008/10/01)
247    //                              jspPrint( TaglibUtil.makeHTMLErrorTable( errMsg,getResource() ) );
248                                    // 4.3.7.0 (2009/06/01)
249                                    if( isRealTime ) { jspPrint( TaglibUtil.makeHTMLSimpleErrorList( errMsg,getResource() ) ); }
250                                    else { jspPrint( TaglibUtil.makeHTMLErrorTable( errMsg, getResource() ) ); }
251    
252                                    if( CMD_NEW.equals( command ) ) {
253                                            removeObject( tableId );
254                                    }
255                                    rtnCode = SKIP_PAGE ;
256                            }
257                            else if( errMsg.getKekka() == ErrorMessage.WARNING ) {
258                                    // 4.3.3.0 (2008/10/01)
259    //                              jspPrint( TaglibUtil.makeHTMLErrorTable( errMsg,getResource() ) );
260                                    // 4.3.7.0 (2009/06/01)
261                                    if( isRealTime ) { jspPrint( TaglibUtil.makeHTMLSimpleErrorList( errMsg,getResource() ) ); }
262                                    else { jspPrint( TaglibUtil.makeHTMLErrorTable( errMsg, getResource() ) ); }                    }
263                    }
264    
265                    return( rtnCode );
266            }
267    
268            /**
269             * タグリブオブジェクトをリリースã—ã¾ã™ã?
270             *
271             * キャãƒ?‚·ãƒ¥ã•れã¦å†åˆ©ç”¨ã•れるã?ã§ã€ãƒ•ィールドã?åˆæœŸè¨­å®šã‚’行ã„ã¾ã™ã?
272             *
273             * @og.rev 2.0.0.4 (2002/09/27) カスタãƒ?‚¿ã‚°ã® release() メソãƒ?ƒ‰ã‚’ã?追åŠ?
274             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()ã§å‘¼ã¶ã€?
275             * @og.rev 3.5.4.2 (2003/12/15) エラー時ã«ã€BODY部ã«è¨˜è¿°ã•れãŸå?容をå?力ã™ã‚‹ã?
276             * @og.rev 3.5.4.3 (2004/01/05) tableId 属æ?を追åŠ??
277             * @og.rev 3.8.0.9 (2005/10/17) mustAnyCheck 属æ?を追åŠ??
278             * @og.rev 4.1.2.1 (2008/03/13) table 属æ?を追åŠ??
279             * @og.rev 4.3.3.0 (2008/10/01) viewSimple属æ?追åŠ?
280             * @og.rev 4.3.7.0 (2009/06/01) viewSimple属æ?å称変更 -> isRealTime
281             * @og.rev 5.2.2.0 (2010/11/01) NEWã®å ´åˆã«ã€å޳å¯?«ãƒã‚§ãƒ?‚¯ã™ã‚‹ãƒ•ラグを追åŠ?
282             * @og.rev 5.4.3.4 (2012/01/12) isColumnLabelを追�
283             *
284             */
285            @Override
286            protected void release2() {
287                    super.release2();
288                    command         = CMD_NEW;      // ç„¡æŒ?®šæ™‚ã¯ã€ãƒã‚§ãƒ?‚¯ã‚’行ã†ã€?
289                    columns         = null;
290                    nullCheck       = null;
291                    maxRowCount     = -1 ;          // åˆæœŸå€¤ã¨ã—ã¦?Œç„¡åˆ¶é™ã‚’æŒ?®?
292                    minRowCount     = -1 ;          // åˆæœŸå€¤ã¨ã—ã¦?Œç„¡åˆ¶é™ã‚’æŒ?®?
293                    checkType       = "AUTO";
294                    bodyString      = null ;        // 3.5.4.2 (2003/12/15)
295                    tableId         = HybsSystem.TBL_MDL_KEY;               // 3.5.4.3 (2004/01/05)
296                    mustAnyCheck= null;             // 3.8.0.9 (2005/10/17)
297                    matchKeys       = null;         // 4.0.0 (2005/11/30)
298                    matchVals       = null;         // 4.0.0 (2005/11/30)
299                    table           = null;         // 4.1.2.1 (2008/03/13)
300    //              isViewSimple= false;    // 4.3.3.0 (2008/10/01)
301                    isRealTime      = false;        // 4.3.7.0 (2009/06/01)
302                    isStrict        = false;        // 5.2.2.0 (2010/11/01) NEWã®å ´åˆã«ã€å޳å¯?«ãƒã‚§ãƒ?‚¯ã™ã‚‹ãƒ•ラグを追åŠ?
303                    isColumnLabel= false;   // 5.4.3.4 (2012/01/12) true ã®å ´åˆã«ã€ã‚«ãƒ©ãƒ?ƒ©ãƒ™ãƒ«ã‚’使用ã—ã¾ã™ã?
304    //              isTblClmLbl = false;    // 5.4.3.4 (2012/01/12) true ã®å ´åˆã«ã€DBTableModelã®ã‚«ãƒ©ãƒ?‹ã‚‰ãƒ©ãƒ™ãƒ«ã‚’å–å¾—ã—ã¾ã™ã?
305                    checkNames      = null;         // 5.4.3.8 (2012/01/24)
306            }
307    
308            /**
309             * DBColumn オブジェクトを作æ?ã—ã¦ã€DBColumn#valueCheck( String )ã§
310             * ãƒã‚§ãƒ?‚¯ã‚’行ã†ã€‚ãã®çµæžœã®ã€ErrorMessage オブジェクトを DBTableModel ã«
311             * å–り込んã§ã€ã‚¨ãƒ©ãƒ¼ã®å ´åˆã?ã€ãã®è¡¨ç¤ºã‚’行ã†ã€?
312             * 表示方法ã?ã€ãã®ã¾ã¾ ViewForm オブジェクトを作æ?ã—ã¦ã€è¡¨ç¤ºã‚’行ã†ã€?
313             *
314             * @og.rev 3.5.5.2 (2004/04/02) リターン値をã?DBTableModel ã‹ã‚‰ ErrorMessage ã«å¤‰æ›´
315             * @og.rev 4.0.0.0 (2005/01/31) リターン値㮠ErrorMessage ã¯ã€å¿?šå­˜åœ¨ã™ã‚‹ã€?
316             * @og.rev 4.1.2.1 (2008/03/13) command="MODIFY" , "DELETE" 時ã«ã¯ã€å¼·åˆ¶çš?«ã€minRowCount="1" ã§å‡¦ç?—ã¾ã™ã?
317             *
318             * @return      エラーメãƒ?‚»ãƒ¼ã‚¸ã®ãƒ??ブルモãƒ?ƒ«
319             */
320            private ErrorMessage makeErrorDBTable() {
321                    ErrorMessage errMsg = new ErrorMessage();
322    
323                    if( "AUTO".equals( checkType ) ) { checkType = command; }
324                    if( CMD_ENTRY.equals( checkType ) ) {
325                            errMsg.setTitle( "Request Column Error!" );
326                            errMsg = makeEntryErrorMessage( errMsg );
327                            errMsg = makeMaxRowCountErrorMessage( errMsg );
328                            errMsg = makeMinRowCountErrorMessage( errMsg );
329                    }
330                    else if( CMD_NEW.equals( checkType ) ) {
331                            errMsg.setTitle( "Entry Column Error!" );
332                            errMsg = makeErrorMessage( errMsg );
333                            errMsg = makeMaxRowCountErrorMessage( errMsg );
334                            errMsg = makeMinRowCountErrorMessage( errMsg );
335                    }
336                    else if( minRowCount >= 0 || maxRowCount >= 0) {  // -1 ã¯åˆ¶é™ç„¡ã?
337                            errMsg.setTitle( "Row Count Error Limited Error!" );
338                            errMsg = makeMaxRowCountErrorMessage( errMsg );
339                            errMsg = makeMinRowCountErrorMessage( errMsg );
340                    }
341                    // 4.1.2.1 (2008/03/13) command="MODIFY" , "DELETE" 時ã«ã¯ã€å¼·åˆ¶çš?«ã€minRowCount="1" ã§å‡¦ç?—ã¾ã™ã?
342                    else if( "MODIFY,DELETE".indexOf( checkType ) >= 0 && minRowCount < 0 ) {
343                            minRowCount = 1;
344                            errMsg = makeMinRowCountErrorMessage( errMsg );
345                    }
346                    return errMsg;
347            }
348    
349            /**
350             * ErrorMessageã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
351             * 引数ã®ã‚«ãƒ©ãƒ?é…å?よりリクエスト情報をå–å¾—ã—ã¦ã€å?ã‚’ãƒã‚§ãƒ?‚¯ã—ã¾ã™ã?
352             * DBColumn#valueCheck( String ) ã®çµæžœã®ErrorMessageã‚’ã™ã¹ã¦ append
353             * ã—ã¦ã?ã¾ã™ã?
354             *
355             * @og.rev 3.8.0.9 (2005/10/17) é¸æŠžå¿?? mustAnyCheck ã®ãƒã‚§ãƒ?‚¯è¿½åŠ?
356             * @og.rev 3.8.1.0 (2005/10/24) ãƒªã‚¯ã‚¨ã‚¹ãƒˆæƒ…å ±ã®æ­£è¦åŒ–変æ›(DBColumn#valueSet(String))中止
357             * @og.rev 3.8.5.3 (2006/06/30) リクエスト㫠% , _ ãŒå«ã¾ã‚ŒãŸã¨ãã?ã€å‰Šé™¤ã—ã¾ã™ã?
358             * @og.rev 4.1.2.1 (2008/03/13) must , mustAny ã®è‡ªå‹•å–得追åŠ?
359             * @og.rev 5.0.0.2 (2009/09/15) 個別ã«xssãƒã‚§ãƒ?‚¯ã‚’false
360             * @og.rev 5.1.9.0 (2010/08/01) åŒã˜åå‰ã®é ?›®ã¯ã€?ã¤ã«ã¾ã¨ã‚ã‚‹(ラジオボタンç­?
361             * @og.rev 5.2.0.0 (2010/09/01) リアルタイãƒ?ƒã‚§ãƒ?‚¯ã®å ´åˆã?ã€must,mustAnyã®è‡ªå‹•ãƒã‚§ãƒ?‚¯ã¯è¡Œã‚ãªã?
362             * @og.rev 5.2.2.0 (2010/11/01) DBColumn#valueCheck ã§ã€ç”˜ã?ƒã‚§ãƒ?‚¯ã‚’行ã†ã‚ˆã†ã«ã€å¼•æ•°ã« isStrict を追åŠ?
363             * @og.rev 5.4.3.4 (2012/01/12) getLabel( String )ã‚’ã?リソースã‹ã‚‰ã«çµ±ä¸?™ã‚‹ã¨ã¨ã‚‚ã«ã€isColumnLabel 対応を行ã†ã€?
364             * @og.rev 5.4.3.8 (2012/01/28) checkNames対�
365             *
366             * @param       errMsg  ErrorMessageオブジェク�
367             *
368             * @return      カラãƒ?‚­ãƒ¼ ??値 ã®ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒ?‚»ãƒ¼ã‚¸ã‚ªãƒ–ジェクãƒ?
369             */
370            private ErrorMessage makeErrorMessage( final ErrorMessage errMsg ) {
371    
372                    // 4.1.2.1 (2008/03/13) must , mustAny ã®è‡ªå‹•å–得追åŠ?
373                    // request ã‹ã‚‰å–å?ã?注æ„:mustAny 以外ã?自由形å¼ã?å€¤ã¯æ‰?¾—ã—ã¦ã?¾ã›ã‚“ã€?
374                    // 5.2.0.0 (2010/09/01) リアルタイãƒ?ƒã‚§ãƒ?‚¯ã®å ´åˆã?ã€must,mustAnyã®è‡ªå‹•ãƒã‚§ãƒ?‚¯ã¯è¡Œã‚ãªã?
375                    //  (基本çš?«ãƒ‘ラメーターをé?らãªã?™ã‚Šè?å‹•ãƒã‚§ãƒ?‚¯ã¯å‹•ã‹ãªã?Œã€RequestCacheã«ã‚ˆã‚Šå‹•ãã“ã¨ãŒã‚ã‚?
376                    if( !isRealTime ) {
377                            if( nullCheck == null ) {
378                                    nullCheck = getRequestValues( HybsSystem.MUST_KEY + "must" );
379                                    // 5.1.9.0 (2010/08/01) åŒã˜åå‰ã®é ?›®ã¯ã€?ã¤ã«ã¾ã¨ã‚ã‚‹(ラジオボタンç­?
380    //                              if( nullCheck != null ) { Arrays.sort( nullCheck ); }
381                                    if( nullCheck != null ) {
382                                            Set<String> ss = new TreeSet<String>();
383                                            ss.addAll( Arrays.asList( nullCheck ) );
384    //                                      nullCheck = ss.toArray( new String[0] );
385                                            nullCheck = ss.toArray( new String[ss.size()] );                // 5.1.9.0 (2010/08/01) K.H
386                                    }
387                            }
388                            if( mustAnyCheck == null ) {
389                                    String[] mustAnyReq = getRequestValues( HybsSystem.MUST_KEY + "mustAny" );
390                                    if( mustAnyReq != null && mustAnyReq.length > 0 ) {
391                                            mustAnyCheck = new String[] { StringUtil.array2line( mustAnyReq,"|" ) };
392                                    }
393                            }
394                    }
395    
396                    if( nullCheck != null && nullCheck.length != 0 ) {
397                            for( int i=0; i<nullCheck.length; i++ ) {
398                                    String clmKey = nullCheck[i];           // 5.4.3.4 (2012/01/12)
399                                    // String val  = getRequestValue( nullCheck[i] );
400    //                              String val  = getRequestValue( nullCheck[i], false ); // 5.0.0.2 (2009/09/15)
401                                    String val  = getRequestValue( clmKey, false ); // 5.0.0.2 (2009/09/15)
402                                    if( val == null || val.length() == 0 ) {
403                                            // 5.4.3.4 (2012/01/12) isColumnLabel 追�
404    //                                      String label = getLabel( nullCheck[i] );        // 4.0.0 (2005/01/31)
405                                            String label = (isColumnLabel) ? getDBColumn( clmKey ).getLabel() : getResource().getLabel( clmKey );
406                                            // ERR0012 : æŒ?®šã?ãƒ??ã‚¿ãŒã‚»ãƒ?ƒˆã•れã¦ã?¾ã›ã‚“ã€?NULLエラー)。key={0}
407                                            errMsg.addMessage( 0,ErrorMessage.NG,"ERR0012",label );
408                                    }
409                            }
410                    }
411                    // 3.8.0.9 (2005/10/17) é¸æŠžå¿?? mustAnyCheck ã®ãƒã‚§ãƒ?‚¯è¿½åŠ?
412                    if( mustAnyCheck != null && mustAnyCheck.length != 0 ) {
413                            for( int i=0; i<mustAnyCheck.length; i++ ) {
414                                    boolean flag = false;
415                                    String[] mustSub = StringUtil.csv2Array( mustAnyCheck[i],'|' );
416                                    for( int j=0; j<mustSub.length; j++ ) {
417                                            // String val  = getRequestValue( mustSub[j] );
418                                            String val  = getRequestValue( mustSub[j], false ); // 5.0.0.2 (2009/09/15)
419                                            if( val != null && val.length() > 0 ) {
420                                                    flag = true; break;             // ã²ã¨ã¤ã§ã‚‚nullã§ãªã‘れã°ã€OK
421                                            }
422                                    }
423                                    if( ! flag ) {
424                                            StringBuilder buf = new StringBuilder();
425                                            for( int j=0; j<mustSub.length; j++ ) {
426                                                    String clmKey = mustSub[j];             // 5.4.3.4 (2012/01/12)
427                                                    // 5.4.3.4 (2012/01/12) isColumnLabel 追�
428    //                                              buf.append( getResource().getLabel( mustSub[j] ) ).append( "," );
429                                                    String label = (isColumnLabel) ? getDBColumn( clmKey ).getLabel() : getResource().getLabel( clmKey );
430                                                    buf.append( label ).append( "," );
431                                            }
432                                            // ERR0036 : é¸æŠžå¿??エラー。以下ã?ãƒ??ã‚¿ã®å†?©ã‚Œã‹ã¯å…¥åŠ›ã—ã¦ãã ã•ã„。key={0}
433                                            errMsg.addMessage( 0,ErrorMessage.NG,"ERR0036",buf.toString() );
434                                    }
435                            }
436                    }
437                    if( columns != null && columns.length != 0 ) {
438                            for( int i=0; i<columns.length; i++ ) {
439                                    // 3.8.1.0 (2005/10/24) ãƒªã‚¯ã‚¨ã‚¹ãƒˆæƒ…å ±ã®æ­£è¦åŒ–変æ›(DBColumn#valueSet(String))中止
440                                    // String clmVal = getRequestValue( columns[i] );
441                                    String clmVal = getRequestValue( columns[i], false ); // 5.0.0.2 (2009/09/15)
442                                    if( clmVal != null && clmVal.length() > 0 ) {
443                                            clmVal = StringUtil.replace( clmVal,"%","" );           // 3.8.5.3 (2006/06/30)
444                                            clmVal = StringUtil.replace( clmVal,"_","" );           // 3.8.5.3 (2006/06/30)
445                                            DBColumn dbColumn = getDBColumn( columns[i] );
446                                            // 5.4.3.8 (2012/01/24) checkNames対�
447                                            if( ( "," + checkNames + "," ).indexOf( "," + columns[i] + "," ) >= 0 ) {
448                                                    String val = dbColumn.valueSet( clmVal );
449                                                    if( val != null ) { clmVal = val; }
450                                            }
451                                            // 5.2.2.0 (2010/11/01) DBColumn#valueCheck ã§ã€ç”˜ã?ƒã‚§ãƒ?‚¯ã‚’行ã†ã‚ˆã†ã«ã€å¼•æ•°ã« isStrict を追åŠ?
452    //                                      errMsg.append( dbColumn.valueCheck( clmVal ) );
453                                            errMsg.append( dbColumn.valueCheck( clmVal,isStrict ) );
454                                    }
455                            }
456                    }
457                    // 4.0.0 (2005/11/30) æ­£è¦è¡¨ç¾ãƒã‚§ãƒ?‚¯ã®è¿½åŠ?
458                    if( matchKeys != null && matchKeys.length != 0 ) {
459                            for( int i=0; i<matchKeys.length; i++ ) {
460                                    String clmKey = matchKeys[i];           // 5.4.3.4 (2012/01/12)
461                                    // String val  = getRequestValue( matchKeys[i] );
462    //                              String val  = getRequestValue( matchKeys[i], false ); // 5.0.0.2 (2009/09/15)
463                                    String val  = getRequestValue( clmKey, false ); // 5.0.0.2 (2009/09/15)
464                                    if( val != null && ! val.matches( matchVals[i] ) ) {
465                                            // 5.4.3.4 (2012/01/12) isColumnLabel 追�
466    //                                      String label = getLabel( matchKeys[i] );
467                                            String label = (isColumnLabel) ? getDBColumn( clmKey ).getLabel() : getResource().getLabel( clmKey );
468                                            // ERR0037 : ãƒ??ã‚¿æ•´åˆæ?エラー。指定ã?ã‚­ãƒ¼ã¯æ•´åˆæ?ãƒã‚§ãƒ?‚¯ã®çµæžœãƒžãƒƒãƒã—ã¾ã›ã‚“ã§ã—ãŸã€‚key={0} val={1} regex={2}
469                                            errMsg.addMessage( 0,ErrorMessage.NG,"ERR0037",label,val,matchVals[i] );
470                                    }
471                            }
472                    }
473    
474                    return errMsg;
475            }
476    
477            /**
478             * エントリーãƒ??ã‚¿ã®ErrorMessageã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
479             * 引数ã®ã‚«ãƒ©ãƒ?é…å?よりエントリーãƒ??ã‚¿å½¢å¼ã?リクエスト情報をå–å¾—ã—ã¦ã€?
480             * 値をãƒã‚§ãƒ?‚¯ã—ã¾ã™ã?
481             * DBColumn#valueCheck( String ) ã®çµæžœã®ErrorMessageã‚’ã™ã¹ã¦ append
482             * ã—ã¦ã?ã¾ã™ã?
483             *
484             * @og.rev 3.1.0.0 (2003/03/20) åå‰ã¨è¡Œç•ªå·ã®åŒºåˆ?‚Šè¨˜å·ã‚?"^" ã‹ã‚‰ "__" ã«å¤‰æ›´ã€?
485             * @og.rev 3.5.5.0 (2004/03/12) åå‰ã¨è¡Œç•ªå·ã®åŒºåˆ?‚Šè¨˜å·("__")ã‚’ã?HybsSystem.JOINT_STRING  ã«å¤‰æ›´ã€?
486             * @og.rev 3.8.0.9 (2005/10/17) é¸æŠžå¿?? mustAnyCheck ã®ãƒã‚§ãƒ?‚¯è¿½åŠ?
487             * @og.rev 4.1.2.1 (2008/03/13) must , mustAny ã®è‡ªå‹•å–得追åŠ?
488             * @og.rev 4.3.6.4 (2009/05/01) 削除時ã«å¿?šmustAnyãƒã‚§ãƒ?‚¯ã‚¨ãƒ©ãƒ¼ã«ãªã‚‹ãƒã‚°ã‚’修正(書込ã¿å¯èƒ½è¡Œã?ã¿ã‚’å?ç?™ã‚?
489             * @og.rev 4.3.7.0 (2009/06/01) リアルタイãƒ?ƒã‚§ãƒ?‚¯ã®å ´åˆã?ã€must,mustAnyã®è‡ªå‹•ãƒã‚§ãƒ?‚¯ã¯è¡Œã‚ãªã?
490             * @og.rev 5.0.0.2 (2009/09/15) xssãƒã‚§ãƒ?‚¯
491             * @og.rev 5.4.3.4 (2012/01/12) getLabel( String )ã‚’ã?リソースã‹ã‚‰ã«çµ±ä¸?™ã‚‹ã¨ã¨ã‚‚ã«ã€isColumnLabel 対応を行ã†ã€?
492             *
493             * @param       errMsg  ErrorMessageオブジェク�
494             *
495             * @return      カラãƒ?‚­ãƒ¼ ??値 ã®ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒ?‚»ãƒ¼ã‚¸ã‚ªãƒ–ジェクãƒ?
496             */
497            private ErrorMessage makeEntryErrorMessage( final ErrorMessage errMsg ) {
498                    int[] rowNo = getParameterRows();
499                    if( rowNo.length == 0 ) { return errMsg; }
500    
501                    // 4.1.2.1 (2008/03/13) must , mustAny ã®è‡ªå‹•å–得追åŠ?
502                    // table ã‹ã‚‰å–å?ã?(ソート済ã¿)
503                    // 4.3.7.0 (2009/06/01) リアルタイãƒ?ƒã‚§ãƒ?‚¯ã®å ´åˆã?ã€must,mustAnyã®è‡ªå‹•ãƒã‚§ãƒ?‚¯ã¯è¡Œã‚ãªã?
504                    if( !isRealTime ) {
505                            if( nullCheck    == null ) { nullCheck    = table.getMustArray();        }
506                            if( mustAnyCheck == null ) { mustAnyCheck = table.getMustAnyArray(); }
507                    }
508    
509                    // 3.8.0.9 (2005/10/17) é¸æŠžå¿?? mustAnyCheck ã®ãƒã‚§ãƒ?‚¯è¿½åŠ?
510                    boolean[][] rowAnyOne = null;
511                    // 4.3.6.4 (2009/05/01)
512                    boolean[] rowForCheck = null;
513                    if( mustAnyCheck != null && mustAnyCheck.length != 0 ) {
514                            rowAnyOne = new boolean[rowNo.length][mustAnyCheck.length];
515                            rowForCheck = new boolean[rowNo.length];
516            //              for( int i=0; i<rowNo.length; i++ ) {
517            //                      Arrays.fill( rowAnyOne[i],false );
518            //              }
519                    }
520    
521                    DBColumn dbColumn = null;       // 5.4.3.4 (2012/01/12) isColumnLabel 対�
522                    Enumeration<?> enume = getParameterNames();               // 4.3.3.6 (2008/11/15) Generics警告対�
523                    while( enume.hasMoreElements() ) {
524                            String key  = (String)(enume.nextElement());
525                            int    idx  = key.lastIndexOf(HybsSystem.JOINT_STRING);
526    
527                            if( idx > 0 ) {
528                                    String column = key.substring(0,idx);
529                                    int    row    = Integer.parseInt( key.substring(idx + 2) );
530                                    // String val    = getRequestValue( key );
531                                    String val    = getRequestValue( key, false ); // 5.0.0.2 (2009/09/15)
532    
533                                    int i = Arrays.binarySearch( rowNo,row );
534                                    if( i >= 0 ) {
535                                            // 5.4.3.4 (2012/01/12) isColumnLabel 対�
536    //                                      DBColumn dbColumn = getDBColumn( column );
537                                            dbColumn = null;
538                                            if( isColumnLabel && table != null ) {
539                                                    int clmNo = table.getColumnNo( column,false );  // エラーをå?ã•ãªã??
540                                                    if( clmNo >= 0 ) {
541                                                            dbColumn = table.getDBColumn( clmNo );
542                                                    }
543                                            }
544                                            if( dbColumn == null ) {
545                                                    dbColumn = getDBColumn( column );
546                                            }
547    
548                                            String val2 = dbColumn.valueSet( val );
549                                            errMsg.append( row+1,dbColumn.valueCheck( val2 ) );
550                                            if( nullCheck != null && nullCheck.length != 0 ) {
551                                                    int j = Arrays.binarySearch( nullCheck,column );
552                                                    if( j>=0 && ( val2 == null || val2.length() == 0 )) {
553                                                            // ERR0012 : æŒ?®šã?ãƒ??ã‚¿ãŒã‚»ãƒ?ƒˆã•れã¦ã?¾ã›ã‚“ã€?NULLエラー)。key={0}
554                                                            errMsg.addMessage( row+1,ErrorMessage.NG,"ERR0012",dbColumn.getLabel() );
555                                                    }
556                                            }
557                                            // 3.8.0.9 (2005/10/17) é¸æŠžå¿?? mustAnyCheck ã®ãƒã‚§ãƒ?‚¯è¿½åŠ?
558                                            if( rowAnyOne != null ) {
559                                                    for( int j=0; j<mustAnyCheck.length; j++ ) {
560                                                            if( !rowAnyOne[i][j] &&
561                                                                    mustAnyCheck[j].indexOf( column ) >= 0 &&
562                                                                    val2 != null && val2.length() > 0 ) {
563                                                                            rowAnyOne[i][j] = true; // ã©ã‚Œã‹ãŒå­˜åœ¨
564                                                            }
565                                                    }
566                                                    // 4.3.6.4 (2009/05/01)
567                                                    rowForCheck[i] = true;
568                                            }
569    
570                                            // 4.0.0 (2005/11/30) æ­£è¦è¡¨ç¾ãƒã‚§ãƒ?‚¯ã®è¿½åŠ?
571                                            if( matchKeys != null && matchKeys.length != 0 ) {
572                                                    for( int j=0; j<matchKeys.length; j++ ) {
573                                                            if( column.equals( matchKeys[j] ) ) {
574                                                                    if( val2 != null && ! val2.matches( matchVals[j] ) ) {
575                                                                            // äº’æ›æ€§ã¯ãªããªã£ã¦ã?‚‹ãŒã?æ­£è¦è¡¨ç¾ãƒã‚§ãƒ?‚¯ã¯ä½™ã‚Šä½¿ã£ã¦ã?ªã??ã§ã€çµ±ä¸?—ã¦ãŠãã€?
576                                                                            // 5.4.3.4 (2012/01/12) isColumnLabel 対�
577                                                                            dbColumn = null;
578                                                                            if( isColumnLabel && table != null ) {
579                                                                                    int clmNo = table.getColumnNo( column,false );  // エラーをå?ã•ãªã??
580                                                                                    if( clmNo >= 0 ) {
581                                                                                            dbColumn = table.getDBColumn( clmNo );
582                                                                                    }
583                                                                            }
584                                                                            if( dbColumn == null ) {
585                                                                                    dbColumn = getDBColumn( column );
586                                                                            }
587    //                                                                      String label = getLabel( column );
588    
589                                                                            // ERR0037 : ãƒ??ã‚¿æ•´åˆæ?エラー。指定ã?ã‚­ãƒ¼ã¯æ•´åˆæ?ãƒã‚§ãƒ?‚¯ã®çµæžœãƒžãƒƒãƒã—ã¾ã›ã‚“ã§ã—ãŸã€‚key={0} val={1} regex={2}
590    //                                                                      errMsg.addMessage( 0,ErrorMessage.NG,"ERR0037",label,val2,matchVals[i] );
591                                                                            errMsg.addMessage( row+1,ErrorMessage.NG,"ERR0037",dbColumn.getLabel(),val2,matchVals[i] );
592                                                                    }
593                                                                    break;
594                                                            }
595                                                    }
596                                            }
597                                    }
598                            }
599                    }
600    
601                    // 3.8.0.9 (2005/10/17) é¸æŠžå¿?? mustAnyCheck ã®ãƒã‚§ãƒ?‚¯è¿½åŠ?
602                    if( rowAnyOne != null ) {
603                            for( int row=0; row<rowAnyOne.length; row++ ) {
604                                    // 4.3.6.4 (2009/05/01) 書込ã¿å¯èƒ½è¡Œã?ã¿ã‚’å?ç?™ã‚?
605                                    if ( rowForCheck[row] ) {
606                                            for ( int i = 0; i < mustAnyCheck.length; i++ ) {
607                                                    if ( !rowAnyOne[row][i] ) {
608                                                            String[] mustSub = StringUtil.csv2Array( mustAnyCheck[i], '|' );
609    
610                                                            StringBuilder buf = new StringBuilder();
611                                                            buf.append( "row=[" ).append( rowNo[row]+1 ).append( "] " );
612                                                            for ( int j = 0; j < mustSub.length; j++ ) {
613                                                                    // ã“ã“ã®å‡¦ç? ã‘ã?ä»–ã¨ç•°ãªã‚‹ã?ã¯ã€äº’æ›æ€§é‡è¦–ã?ãŸã‚ã€?é¸æŠžå¿??ã¯åˆ©ç”¨é »åº¦ãŒé«˜ã„ã®ã§ã€?
614                                                                    // 5.4.3.4 (2012/01/12) isColumnLabel 対�
615                                                                    String label = null ;
616                                                                    if( isColumnLabel && table != null ) {
617                                                                            int clmNo = table.getColumnNo( mustSub[j],false );      // エラーをå?ã•ãªã??
618                                                                            if( clmNo >= 0 ) {
619                                                                                    dbColumn = table.getDBColumn( clmNo );
620                                                                            }
621                                                                            if( dbColumn == null ) {
622                                                                                    dbColumn = getDBColumn( mustSub[j] );
623                                                                            }
624                                                                            label = dbColumn.getLabel();
625                                                                    }
626                                                                    else {
627                                                                            label = getResource().getLabel( mustSub[j] );           // äº’æ›æ€§ã®ãŸã‚ã®å‡¦ç½®ã€?
628                                                                    }
629    //                                                              buf.append( getResource().getLabel( mustSub[j] ) ).append( "|" );
630                                                                    buf.append( label ).append( "|" );
631                                                            }
632                                                            // ERR0036 : é¸æŠžå¿??エラー。以下ã?ãƒ??ã‚¿ã®å†?©ã‚Œã‹ã¯å…¥åŠ›ã—ã¦ãã ã•ã„。key={0}
633    //                                                      errMsg.addMessage( 0, ErrorMessage.NG, "ERR0036", buf.toString() );
634                                                            errMsg.addMessage( rowNo[row]+1, ErrorMessage.NG, "ERR0036", buf.toString() );
635                                                    }
636                                            }
637                                    }
638                            }
639                    }
640    
641                    return errMsg;
642            }
643    
644            /**
645             * ErrorMessageã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
646             * リクエストã•れãŸä»¶æ•°ã®æœ?¤§å€¤ã«åˆ¶é™ã‚’åŠ?ˆã¾ã™ã?
647             * ?‘ä»¶ã?‘ã«ã—ãŸã??åˆã??Œé?常ã¯Viewã§ãƒã‚§ãƒ?‚¯ãƒœãƒƒã‚¯ã‚¹ã‚’使用ã›ãšã«
648             * ラジオボタンを使用ã—ã¦ãã ã•ã„ã€?
649             *
650             * @param       errMsg  ErrorMessageオブジェク�
651             *
652             * @return      カラãƒ?‚­ãƒ¼ ??値 ã®ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒ?‚»ãƒ¼ã‚¸ã‚ªãƒ–ジェクãƒ?
653             */
654            private ErrorMessage makeMaxRowCountErrorMessage( final ErrorMessage errMsg ) {
655                    if( maxRowCount < 0 ) { return errMsg; }     // 無制�
656    
657                    // 件数制é™ã?ãƒã‚§ãƒ?‚¯
658                    int[] rowNo = getParameterRows();
659                    int rowCount = rowNo.length ;
660                    if( rowCount > maxRowCount ) {
661                            // ERR0017 : é¸æŠžã‚¨ãƒ©ãƒ¼ã€‚é¸æŠžè¡Œæ•°({0} ä»¶)ãŒã?æœ?¤§åˆ¶é™å?({1} ä»¶)以上é¸ã°ã‚Œã¾ã—ãŸã€?
662                            String arg0 = String.valueOf( rowCount );
663                            String arg1 = String.valueOf( maxRowCount );
664                            errMsg.addMessage( 0,ErrorMessage.NG,"ERR0017",arg0,arg1 );
665                    }
666    
667                    return errMsg;
668            }
669    
670            /**
671             * ErrorMessageã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
672             * リクエストã•れãŸä»¶æ•°ã®æœ?°å?ã«åˆ¶é™ã‚’åŠ?ˆã¾ã™ã?
673             * ?‘ä»¶ã?‘ã«ã—ãŸã??åˆã??Œé?常ã¯Viewã§ãƒã‚§ãƒ?‚¯ãƒœãƒƒã‚¯ã‚¹ã‚’使用ã›ãšã«
674             * ラジオボタンを使用ã—ã¦ãã ã•ã„ã€?
675             *
676             * @param       errMsg  ErrorMessageオブジェク�
677             *
678             * @return      カラãƒ?‚­ãƒ¼ ??値 ã®ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒ?‚»ãƒ¼ã‚¸ã‚ªãƒ–ジェクãƒ?
679             */
680            private ErrorMessage makeMinRowCountErrorMessage( final ErrorMessage errMsg ) {
681                    if( minRowCount < 0 ) { return errMsg; }     // 無制�
682    
683                    // 件数制é™ã?ãƒã‚§ãƒ?‚¯
684                    int[] rowNo = getParameterRows();
685                    int rowCount = rowNo.length ;
686                    if( rowCount < minRowCount ) {
687                            // ERR0018 : é¸æŠžã‚¨ãƒ©ãƒ¼ã€‚é¸æŠžè¡Œæ•°({0} ä»¶)ãŒã?æœ?°åˆ¶é™å?({1} ä»¶)以下é¸ã°ã‚Œã¾ã—ãŸã€?
688                            String arg0 = String.valueOf( rowCount );
689                            String arg1 = String.valueOf( minRowCount );
690                            errMsg.addMessage( 0,ErrorMessage.NG,"ERR0018",arg0,arg1 );
691                    }
692    
693                    return errMsg;
694            }
695    
696            /**
697             * ã€TAG】ãƒã‚§ãƒ?‚¯ã™ã¹ãカラãƒ??をカンマ区åˆ?‚Š(CSVå½¢å¼?ã§æŒ?®šã—ã¾ã™ã?
698             *
699             * @og.tag columns="AAA,BBB,CCC,DDD"
700             * <del>å…ˆã«é…å?ã«åˆ?§£ã—ã¦ã‹ã‚‰ãƒªã‚¯ã‚¨ã‚¹ãƒˆå¤‰æ•°ã®å€¤ã‚’å–å¾—ã™ã‚‹ã‚ˆã?«ã—ã¾ã™ã?
701             * ã“ã†ã™ã‚‹äº‹ã§ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«ã‚«ãƒ³ãƒžåŒºåˆ?‚Šã®å€¤ã‚’設定ã§ãるよã†ã«ãªã‚Šã¾ã™ã?</del>
702             * åˆ?§£æ–¹æ³•ã?ã€??常ã®ãƒ‘ラメータå–得後ã«ã€CSVåˆ?§£ã—ã¾ã™ã?
703             * "*" を指定ã™ã‚‹ã¨ã€command="NEW" ã®ã¨ãã?判定ã«ã™ã¹ã¦ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆæ–‡å­—å?ã‚?
704             * ãƒã‚§ãƒ?‚¯å¯¾è±¡ã¨ã—ã¾ã™ã?通常ã¯ã€å¿?¦å?ã?‘æŒ?®šã—ã¾ã™ãŒã€å‹•çš?‚«ãƒ©ãƒ?ªã©ã®
705             * å ´åˆã?ã€ã‚«ãƒ©ãƒ?ã‚’äºˆã‚æŒ?®šã§ããªã?Ÿã‚ã?"*" ã§æŒ?®šã§ãるよã†ã«ã—ã¾ã™ã?
706             * ãã?å ´åˆã?"h_" , "hX_" , maxRowCount , command , pageSize , pagePlus ,
707             * GAMENID , BACK_JSPID , BACK_GAMENID ã®äºˆç´?ªžã?ã€å¯¾è±¡ã‹ã‚‰é™¤ãã¾ã™ã?
708             *
709             * @og.rev 3.5.6.2 (2004/07/05) å…ˆã«é…å?ã«åˆ?§£ã—ã¦ã‹ã‚‰ãƒªã‚¯ã‚¨ã‚¹ãƒˆå¤‰æ•°ã®å€¤ã‚’å–å¾?
710             * @og.rev 3.8.8.5 (2007/03/09) 通常ã®ãƒ‘ラメータå–得後ã«ã€CSVåˆ?§£ã«æˆ»ã—ã¾ã™ã?
711             * @og.rev 5.4.3.4 (2012/01/12) command="NEW" ã®ã¨ãã?動的カラãƒ?¯¾å¿? "*" ã§ã™ã¹ã¦ã®ãƒªã‚¯ã‚¨ã‚¹ãƒ?
712             *
713             * @param   clms カラ�?(CSV形�
714             */
715            public void setColumns( final String clms ) {
716                    columns = StringUtil.csv2Array( getRequestParameter( clms ) );
717                    if( columns.length == 0 ) { columns = null; }
718    
719                    // 5.4.3.4 (2012/01/12) command="NEW" ã®ã¨ãã?動的カラãƒ?¯¾å¿? "*" ã§ã™ã¹ã¦ã®ãƒªã‚¯ã‚¨ã‚¹ãƒ?
720                    if( columns != null && "*".equals( columns[0] ) ) {
721                            Set<String> clmSet = new TreeSet<String>();         // リクエストã?ãƒãƒ©ãƒãƒ©ãªã®ã§ã€ã¨ã‚Šã‚ãˆãšã‚½ãƒ¼ãƒˆã—ã¦ãã¾ã™ã?
722    
723                            Enumeration<?> enume = getParameterNames();               // Generics警告対�
724                            while( enume.hasMoreElements() ) {
725                                    String clm  = (String)(enume.nextElement());
726                                    // 予ç´?ªžä»¥å¤–を登録ã—ã¾ã™ã?
727                                    if( clm != null && !clm.isEmpty() && !clm.startsWith( "h_" ) && !clm.startsWith( "hX_" ) ) {
728                                            clmSet.add( clm );
729                                    }
730                            }
731                            // 予ç´?ªžã‚’削除ã—ã¾ã™ã?
732                            clmSet.remove( "maxRowCount" );
733                            clmSet.remove( "command" );
734                            clmSet.remove( "pageSize" );
735                            clmSet.remove( "pagePlus" );
736                            clmSet.remove( "GAMENID" );
737                            clmSet.remove( "BACK_JSPID" );
738                            clmSet.remove( "BACK_GAMENID" );
739    
740                            columns = clmSet.toArray( new String[clmSet.size()] );
741                    }
742            }
743    
744            /**
745             * ã€TAG】NULL ãƒã‚§ãƒ?‚¯ã™ã¹ãカラãƒ??をカンマ区åˆ?CSVå½¢å¼?ã‚Šã§æŒ?®šã—ã¾ã™ã?
746             *
747             * @og.tag
748             * (must 属æ?ã®ã‚»ãƒ?ƒˆã«ã‚ˆã‚Šã€è?å‹•å?ç?•れã¾ã?
749             * nullCheck="AAA,BBB,CCC,DDD"
750             * <del>å…ˆã«é…å?ã«åˆ?§£ã—ã¦ã‹ã‚‰ãƒªã‚¯ã‚¨ã‚¹ãƒˆå¤‰æ•°ã®å€¤ã‚’å–å¾—ã™ã‚‹ã‚ˆã?«ã—ã¾ã™ã?
751             * ã“ã†ã™ã‚‹äº‹ã§ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«ã‚«ãƒ³ãƒžåŒºåˆ?‚Šã®å€¤ã‚’設定ã§ãるよã†ã«ãªã‚Šã¾ã™ã?</del>
752             * åˆ?§£æ–¹æ³•ã?ã€??常ã®ãƒ‘ラメータå–得後ã«ã€CSVåˆ?§£ã—ã¾ã™ã?
753             *
754             * @og.rev 3.5.6.2 (2004/07/05) å…ˆã«é…å?ã«åˆ?§£ã—ã¦ã‹ã‚‰ãƒªã‚¯ã‚¨ã‚¹ãƒˆå¤‰æ•°ã®å€¤ã‚’å–å¾?
755             * @og.rev 3.8.8.5 (2007/03/09) 通常ã®ãƒ‘ラメータå–得後ã«ã€CSVåˆ?§£ã«æˆ»ã—ã¾ã™ã?
756             *
757             * @param   clms カラ�?(CSV形�
758             */
759            public void setNullCheck( final String clms ) {
760                    nullCheck = StringUtil.csv2Array( getRequestParameter( clms ) );
761                    if( nullCheck.length == 0 ) { nullCheck = null; }
762                    else {
763                            Arrays.sort( nullCheck );
764                    }
765            }
766    
767            /**
768             * ã€TAGã€‘é¸æŠžå¿??カラãƒ?æŒ?®šã?カラãƒ??å†?œ€ä½Žã?ã¨ã¤ãŒNULLã§ãªã?ã‚?AA|BB|CC,XX|YY|ZZ" å½¢å¼ã§æŒ?®šã—ã¾ã™ã?
769             *
770             * @og.tag
771             * (mustAny 属æ?ã®ã‚»ãƒ?ƒˆã«ã‚ˆã‚Šã€è?å‹•å?ç?•れã¾ã?
772             * è¤?•°ã®ã‚«ãƒ©ãƒ?±žæ?ã®å€¤ã®ã?¡ã€ã©ã‚Œã‹ã?null ã§ãªã??åˆã?正常ã¨ã—ã?
773             * ã™ã¹ã¦ã?null ã®å ´åˆã‚’警告ã—ã¾ã™ã?
774             *
775             *  例:mustAnyCheck="AA|BB|CC"
776             *      AA,BB,CC ã®ã‚«ãƒ©ãƒ?§é¸æŠžå¿??(ã™ã¹ã¦ãŒnullãªã‚‰ã‚¨ãƒ©ãƒ¼)
777             *  例:mustAnyCheck="AA|BB|CC,XX|YY|ZZ"
778             *      AA,BB,CC ã®ã‚»ãƒ?ƒˆã¨ã€XX,YY,ZZã®ã‚»ãƒ?ƒˆã§ãれãžã‚Œé¸æŠžå¿??ã€?
779             *  例:mustAnyCheck="AA|XX,AA|YY,AA|ZZ"
780             *      AA ã«å€¤ãŒã‚れã?ã™ã¹ã¦æˆç«‹ã?ãã†ã§ãªã??åˆã?ã€XX 㨠YY 㨠ZZ ãŒã™ã¹ã¦å¿??ã€?
781             *  例:mustAnyCheck="AA|BB,BB|CC,AA|CC"
782             *      AA,BB,CC ã®å†??ã©ã‚Œã‹?’ã¤ãŒå¿??ã€?AãŒæ?ç«‹ã™ã‚Œã?BBã‹CCãŒå¿??ã€‚åŒæ§˜ã«ã€?
783             *      BBãŒæ?ç«‹ã™ã‚Œã?ã€AAã‹CCãŒå¿??ã€?
784             *
785             * é¸æŠžå¿??ã¯ã€must ã¨åŒæ§˜ã«ã€è‰²ã¥ã‘を行ã†(query.jsp)ç”»é¢ã§ã¯ã€mustAny 属æ?ã‚?
786             * ã‚»ãƒ?ƒˆã—ã¾ã™ã?ãƒã‚§ãƒ?‚¯ã‚’行ã†(result.jsp)ç”»é¢ã§ã¯ã€columnCheck ã‚¿ã‚°ã®
787             * mustAnyCheck 属æ?ã«ã€?¸æŠžå¿??カラãƒ?‚’æŒ?®šã—ã¾ã™ã?(上記å‚ç…§)
788             * column ã‚¿ã‚°ç­‰ã? mustAny 属æ?ã«ã€mustAny="true" ã¨ã‚»ãƒ?ƒˆã™ã‚‹ã¨ã€ç”Ÿæˆã•れる
789             * HTMLã¯ã€class="mustAny" ãŒå?力ã•れã¾ã™ã?エンジン標準ã§ã¯ã€default.css ã«
790             * .mustAny ãŒå®šç¾©ã•れã¦ã?¾ã™ã?( background-color: #CCFFFF; )
791             * ãªãŠã?mustAny 属æ?ã«ã€true 以外ã?値をセãƒ?ƒˆã—ãŸå ´å?mustAny="XYZ")ã¯ã€?
792             * 生æ?ã•れるHTMLã«ã€class="XYZ" ãŒå?力ã•れã¾ã™ã?ã“れã¯ã€è¤?•°ã®ã‚°ãƒ«ãƒ¼ãƒ—é–“ã§
793             * 色を変ãˆã¦ã€?¸æŠžå¿??を指定ã™ã‚‹å?åˆã«ä½¿ç”¨ã—ã¾ã™ã?色ã¯ã€custom/custom.css
794             * ã§æŒ?®šã—ã¾ã™ã?
795             * åˆ?§£æ–¹æ³•ã?ã€??常ã®ãƒ‘ラメータå–得後ã«ã€CSVåˆ?§£ã—ã¾ã™ã?
796             *
797             * @og.rev 3.8.0.9 (2005/10/17) æ–°è¦è¿½åŠ?
798             * @og.rev 3.8.8.5 (2007/03/09) 通常ã®ãƒ‘ラメータå–得後ã«ã€CSVåˆ?§£ã«æˆ»ã—ã¾ã™ã?
799             *
800             * @param   clms é¸æŠžå¿??カラãƒ?
801             */
802            public void setMustAnyCheck( final String clms ) {
803                    mustAnyCheck = StringUtil.csv2Array( getRequestParameter( clms ) );
804                    if( mustAnyCheck.length == 0 ) { mustAnyCheck = null; }
805                    else {
806                            Arrays.sort( mustAnyCheck );
807                    }
808            }
809    
810            /**
811             * ã€TAG】コマンド[NEW/RENEW/ENTRY]ã‚’ã‚»ãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:NEW)ã€?
812             *
813             * @og.tag
814             * コマンドã?,HTMLã‹ã‚‰(get/post)æŒ?®šã•れã¾ã™ã?ã§,CMD_xxx ã§è¨­å®šã•れる
815             * フィールド定数値ã®ã?¥ã‚Œã‹ã‚’ã?æŒ?®šã§ãã¾ã™ã?
816             * 何も設定ã•れãªã??ã¾ãŸã?ã€null ã®å ´åˆã?ã€?NEW" ãŒå?期å?ã«ã‚»ãƒ?ƒˆã•れã¾ã™ã?
817             *
818             * @param       cmd コマンãƒ?public static final 宣è¨?•れã¦ã?‚‹æ–?­—å?)
819             * @see         <a href="{&#064;docRoot}/constant-values.html#org.opengion.hayabusa.taglib.ColumnCheckTag.CMD_NEW">コマンド定数</a>
820             */
821            public void setCommand( final String cmd ) {
822                    String cmd2 = getRequestParameter( cmd );
823                    if( cmd2 != null && cmd2.length() > 0 ) { command = cmd2.toUpperCase(Locale.JAPAN); }
824            }
825    
826            /**
827             * ã€TAGã€?ãƒã‚§ãƒ?‚¯å¯¾è±¡ã®ãƒ??ã‚¿[AUTO/NEW/ENTRY]を指定ã—ã¾ã?åˆæœŸå€¤:AUTO)ã€?
828             *
829             * @og.tag
830             * 通常ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆãƒ‡ãƒ¼ã‚¿ã¯ã€ã‚­ãƒ¼ãã?ã‚‚ã?ã§ã™ãŒ,エントリãƒ??ã‚¿ã¯è¡¨å½¢å¼ã?
831             * ãƒ??ã‚¿ã‚’ä¸?‹¬ã§ç™»éŒ²ã™ã‚‹ç‚ºã€?キー??__" ??行番å·)å½¢å¼ã‚’ã€ãƒãƒ©ã™å¿?¦ãŒã‚りã¾ã™ã?
832             *
833             * ENTRY ã¯ã€DBTableModelã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆæƒ…報をãƒã‚§ãƒ?‚¯ã—ã¾ã™ã?
834             * ã“れã¯ã€å?ãƒ??ã‚¿ãŒå¯¾è±¡ã«ãªã‚Šã¾ã™ã?(columns/nullCheck 属æ?ã¯ç„¡åй)
835             * AUTO ã¯ã€command ãŒã?上è¨?NEW ã?ENTRY ã‹ã‚’判断ã—ã¦å‡¦ç?‚’振りå?ã‘ã¾ã™ã?
836             * åˆæœŸå€¤ã¯ã€AUTO ã§ã™ã?
837             *
838             * @param   flag ãƒã‚§ãƒ?‚¯å¯¾è±¡ã®ãƒ??ã‚¿(AUTO,NEW,ENTRY)
839             */
840            public void setCheckType( final String flag ) {
841                    String ct = getRequestParameter( flag );
842                    if( ct != null && ct.length() > 0 ) { checkType = ct ; }
843            }
844    
845            /**
846             * ã€TAGã€?del>ENTRY時ã«</del>ãƒã‚§ãƒ?‚¯ã§é¸æŠžã•れãŸè¡Œæ•°ã®æœ?¤§å€¤ã‚’設定ã—ã¾ã™ã?
847             *
848             * @og.tag
849             * æœ?¤§é¸æŠžä»¶æ•°ã‚’è¶?ˆãŸå?åˆã?,エラーメãƒ?‚»ãƒ¼ã‚¸ã‚’è¿”ã—ã¾ã™ã?
850             * 例ãˆã°ã€?¼‘ä»¶ã®ã¿ã‚’正常ã¨ã™ã‚‹å ´åˆã?ã€maxRowCount="1" ã¨ã—ã¾ã™ã?
851             *
852             * @param   count 制é™ã‚’ã‹ã‘ãŸã„行数(ã“ã?ä»¶æ•°ã¨åŒã˜å ´åˆã?正常 )
853             */
854            public void setMaxRowCount( final String count ) {
855                    maxRowCount = nval( getRequestParameter( count ),maxRowCount );
856            }
857    
858            /**
859             * ã€TAGã€?del>ENTRY時ã«</del>ãƒã‚§ãƒ?‚¯ã§é¸æŠžã•れãŸè¡Œæ•°ã®æœ?°å?を設定ã—ã¾ã™ã?
860             *
861             * @og.tag
862             * æœ?°é¸æŠžä»¶æ•°ã‚’è¶?ˆãªã??åˆã?ã€ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒ?‚»ãƒ¼ã‚¸ã‚’è¿”ã—ã¾ã™ã?
863             * 例ãˆã°ã€?¼‘ä»¶ã®ã¿ã‚’正常ã¨ã™ã‚‹å ´åˆã?ã€minRowCount="1" ã¨ã—ã¾ã™ã?
864             *
865             * @param   count 制é™ã‚’ã‹ã‘ãŸã„行数(ã“ã?ä»¶æ•°ã¨åŒã˜å ´åˆã?正常 )
866             */
867             public void setMinRowCount( final String count ) {
868                    minRowCount = nval( getRequestParameter( count ), minRowCount );
869             }
870    
871            /**
872             * ã€TAGã€?通常ã¯ä½¿ã?¾ã›ã‚“) sessionã«ç™»éŒ²ã•れã¦ã?‚‹ DBTableModel ã‚’å–りå?ã™ã‚­ãƒ¼ã‚’指定ã—ã¾ã™ã?
873             *
874             * @og.tag
875             * æ¤œç´¢çµæžœã®DBTableModelを別メモリーã«åˆ?‘ã‚‹å?åˆã?ã€ã“ã®ã‚­ãƒ¼ã‚’指定ã—ã¾ã™ã?
876             * ãã?å ´åˆã?メモリ上ã‹ã‚‰å‰Šé™¤ã™ã‚‹æ–¹æ³•ãŒãªã?Ÿã‚?session タイãƒ?‚¢ã‚¦ãƒˆã§ç ´æ£?大é‡ã?
877             * ãƒ??ã‚¿ã‚’å?ã‘ãŸå ´åˆã?ã€ã”注æ„ãã?•ã??
878             * åˆæœŸå€¤ã¯ã€HybsSystem.TBL_MDL_KEY ã§ã™ã?
879             *
880             * @og.rev 3.5.4.3 (2004/01/05) æ–°è¦è¿½åŠ?
881             *
882             * @param       id sessionã«ç™»éŒ²ã™ã‚‹æ™‚ã? ID
883             */
884            public void setTableId( final String id ) {
885                    tableId = nval( getRequestParameter( id ),tableId );
886            }
887    
888            /**
889             * ã€TAG】正è¦è¡¨ç¾ã§ã®ãƒžãƒƒãƒãƒ³ã‚°ã‚’行ã†ã‚«ãƒ©ãƒ??をカンマ区åˆ?‚Š(CSVå½¢å¼?ã§æŒ?®šã—ã¾ã™ã?
890             *
891             * @og.tag matchKeys="AAA,BBB,CCC,DDD"
892             * matchKeys属æ?ã¨matchVals属æ?ã®å€‹æ•°ã¯ã€åŒã˜ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“ã€?
893             * å…ˆã«é…å?ã«åˆ?§£ã—ã¦ã‹ã‚‰ãƒªã‚¯ã‚¨ã‚¹ãƒˆå¤‰æ•°ã®å€¤ã‚’å–å¾—ã™ã‚‹ã‚ˆã?«ã—ã¾ã™ã?
894             * ã“ã†ã™ã‚‹äº‹ã§ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«ã‚«ãƒ³ãƒžåŒºåˆ?‚Šã®å€¤ã‚’設定ã§ãるよã†ã«ãªã‚Šã¾ã™ã?
895             *
896             * @og.rev 4.0.0.0 (2005/11/30) æ–°è¦ä½œæ?
897             *
898             * @param   keys カラ�?(CSV形�
899             * @see     #setMatchVals( String )
900             */
901            public void setMatchKeys( final String keys ) {
902                    matchKeys = getCSVParameter( keys );
903    
904                    if( matchVals != null && matchKeys.length != matchVals.length ) {
905                            String errMsg = "matchKeys属æ?ã¨matchVals属æ?ã®å€‹æ•°ãŒåˆã?¾ã›ã‚“ã€?
906                                                    + HybsSystem.CR
907                                                    + " matchKeys=[" + matchKeys.length + "]:KEYS="
908                                                    + StringUtil.array2csv( matchKeys ) + HybsSystem.CR
909                                                    + " matchVals=[" + matchVals.length + "]:VLAS="
910                                                    + StringUtil.array2csv( matchVals ) + HybsSystem.CR ;
911                            throw new HybsSystemException( errMsg );
912                    }
913            }
914    
915            /**
916             * ã€TAG】正è¦è¡¨ç¾ã§ã®ãƒžãƒƒãƒãƒ³ã‚°ã‚’行ã†ã‚«ãƒ©ãƒ??ã«å¯¾ã™ã‚‹å€¤(æ­£è¦è¡¨ç¾)をカンマ区åˆ?‚Š(CSVå½¢å¼?ã§æŒ?®šã—ã¾ã™ã?
917             *
918             * @og.tag matchVals="AAA,BBB,CCC,DDD"
919             * matchKeys属æ?ã¨matchVals属æ?ã®å€‹æ•°ã¯ã€åŒã˜ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“ã€?
920             * å…ˆã«é…å?ã«åˆ?§£ã—ã¦ã‹ã‚‰ãƒªã‚¯ã‚¨ã‚¹ãƒˆå¤‰æ•°ã®å€¤ã‚’å–å¾—ã™ã‚‹ã‚ˆã?«ã—ã¾ã™ã?
921             * ã“ã†ã™ã‚‹äº‹ã§ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«ã‚«ãƒ³ãƒžåŒºåˆ?‚Šã®å€¤ã‚’設定ã§ãるよã†ã«ãªã‚Šã¾ã™ã?
922             *
923             * @og.rev 4.0.0.0 (2005/11/30) æ–°è¦ä½œæ?
924             *
925             * @param   vals カラãƒ??ã«å¯¾ã™ã‚‹å€¤(æ­£è¦è¡¨ç¾)(CSVå½¢å¼?
926             * @see     #setMatchKeys( String )
927             */
928            public void setMatchVals( final String vals ) {
929                    matchVals = getCSVParameter( vals );
930    
931                    if( matchKeys != null && matchKeys.length != matchVals.length ) {
932                            String errMsg = "matchKeys属æ?ã¨matchVals属æ?ã®å€‹æ•°ãŒåˆã?¾ã›ã‚“ã€?
933                                                    + HybsSystem.CR
934                                                    + " matchKeys=[" + matchKeys.length + "]:KEYS="
935                                                    + StringUtil.array2csv( matchKeys ) + HybsSystem.CR
936                                                    + " matchVals=[" + matchVals.length + "]:VLAS="
937                                                    + StringUtil.array2csv( matchVals ) + HybsSystem.CR ;
938                            throw new HybsSystemException( errMsg );
939                    }
940            }
941    
942            /**
943             * ã€TAGã€?通常使ã?¾ã›ã‚“)リアルタイãƒ?ƒã‚§ãƒ?‚¯ã‚’行ã†å ´åˆã«æœ‰åйã«ã—ã¾ã™ã?
944             *
945             * @og.tag
946             * リアルタイãƒ?ƒã‚§ãƒ?‚¯ã‚’行ã†å ´åˆã«æœ‰åйã«ã™ã‚‹å±žæ?ã§ã™ã?
947             * trueãŒæŒ‡å®šã•れãŸå ´åˆã?通常ã®ãƒã‚§ãƒ?‚¯ã¨æ¯”è¼?—ã€ä»¥ä¸‹ã?差異ãŒã‚りã¾ã™ã?
948             * â‘?‚¨ãƒ©ãƒ¼çµæžœã‚’簡易フォーマットã§å‡ºåŠ›ã—ã¾ã™ã?
949             *   (ViewFormType="HTMLSimpleErrorList"ã§è¡¨ç¤ºã•れã¾ã™ã?)
950             *   ã“ã?簡易フォーマットã§å‡ºåŠ›ã—ãŸå?åˆã?ã€ãƒ©ãƒ™ãƒ«(短)ã®å®šç¾©ã§å‡ºåŠ›ã•れã?
951             *   カラãƒ?ã‚?ƒ‡ãƒ¼ã‚¿ç­‰ã?出力ã•れã¾ã›ã‚“ã€?
952             * â‘¡must,mustAny属æ?ã®ãƒã‚§ãƒ?‚¯ã‚’行ã„ã¾ã›ã‚“ã€?
953             *   å¿??åŠã?é¸æŠžå¿??ã¯ã€è¦–覚的ã«åˆ¤åˆ¥ã§ãã‚‹ãŸã‚ã€ãƒªã‚¢ãƒ«ã‚¿ã‚¤ãƒ?ƒã‚§ãƒ?‚¯ã®
954             *   対象外ã¨ã—ã¾ã™ã?
955             *
956             * @og.rev 4.3.3.0 (2008/10/01) æ–°è¦ä½œæ?
957             * @og.rev 4.3.7.0 (2009/06/01) viewSimple属æ?å称変更 -> isRealTime
958             *
959             * @param   flg 簡易表示を行ã†ã‹ã©ã?‹
960             */
961            public void setRealTime( final String flg ) {
962                    isRealTime = nval( getRequestParameter( flg ),isRealTime );
963            }
964    
965            /**
966             * ã€TAG】NEWã®å ´åˆã«ã€å޳å¯?«ãƒã‚§ãƒ?‚¯ã™ã‚‹ã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:false)ã€?
967             *
968             * @og.tag
969             * ãƒ??ã‚¿ã‚’ãƒã‚§ãƒ?‚¯ã™ã‚‹ã«å½“ãŸã‚Šã?ã‚ã„ã¾ã?¤œç´¢ãªã©ã§å޳å¯?«ãƒã‚§ãƒ?‚¯ã™ã‚‹ã¨
970             * エラーã«ãªã‚‹ã‚±ãƒ¼ã‚¹ãŒã‚ã‚‹ãŸã‚ã?command="NEW" ã®ãƒã‚§ãƒ?‚¯æ™‚ã«ã¯ã€ç”˜ã?›®ã®
971             * ãƒã‚§ãƒ?‚¯ã‚’行ã£ã¦ã?¾ã™ã?DBColumn#valueCheck( String , false )
972             * command="ENTRY" ã®ãƒã‚§ãƒ?‚¯ã¯ã€å޳å¯?ªãƒã‚§ãƒ?‚¯ã§ã™ã?
973             * ã“ã?フラグã¯ã€æ¤œç´¢æ™‚ã§ã‚‚ã?厳å¯?ªãƒã‚§ãƒ?‚¯ã‚’行ã„ãŸã„å ´åˆã«ã€true ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
974             *
975             * @og.rev 5.2.2.0 (2010/11/01) æ–°è¦ä½œæ?
976             *
977             * @param   flg 厳å¯?«ãƒã‚§ãƒ?‚¯ã™ã‚‹ã‹ã©ã?‹ [true:厳å¯?false:甘ã„]
978             */
979            public void setUseStrict( final String flg ) {
980                    isStrict = nval( getRequestParameter( flg ),isStrict );
981            }
982    
983            /**
984             * ã€TAG】カラãƒ?ƒ©ãƒ™ãƒ«ã‚’使用ã™ã‚‹ã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:false)ã€?
985             *
986             * @og.tag
987             * カラãƒ?ƒ©ãƒ™ãƒ«ã¯ãƒ©ãƒ™ãƒ«ãƒ­ãƒ¼ãƒ??を利用ã›ãšã«ã‚¢ãƒ—リケーションå´ã§
988             * 追åŠ?—ãŸãƒ©ãƒ™ãƒ«ã‚’ResourceManagerã«ã‚­ãƒ£ãƒ?‚·ãƒ¥ã—ã¦ã?‚‹æ‰?‹ã‚‰å–りå?ã?
989             * ã‹ã©ã?‹ã‚’指定ã—ã¾ã™ã?
990             * カラãƒ?ƒ©ãƒ™ãƒ«ã«å­˜åœ¨ã—ãªã??åˆã?ã€??常ã®ãƒ©ãƒ™ãƒ«ã‹ã‚‰æ¤œç´¢ã—ã¾ã™ã?
991             *
992             * @og.rev 5.4.3.4 (2012/01/12) æ–°è¦ä½œæ?
993             *
994             * @param   flg カラãƒ?ƒ©ãƒ™ãƒ«ã‚’使用ã™ã‚‹ã‹ã©ã?‹ true:ã™ã‚‹/false:ã—ãªã„]
995             */
996            public void setUseColumnLabel( final String flg ) {
997                    isColumnLabel = nval( getRequestParameter( flg ),isColumnLabel );
998            }
999    
1000            /**
1001             * ã€TAG】ラベルをDBTableModel ã®ã‚«ãƒ©ãƒ?‹ã‚‰å–å¾—ã™ã‚‹ã‹ã©ã?‹ã‚’指定ã—ã¾ã?åˆæœŸå€¤:false)ã€?
1002             *
1003             * @og.tag
1004             * エラー時ã?ラベルã¯é€šå¸¸ã¯ãƒ©ãƒ™ãƒ«ãƒªã‚½ãƒ¼ã‚¹ã‹ã‚‰å–å¾—ã—ã¦ã?¾ã™ãŒã€?
1005             * ColumnEditorç­‰ã§ã€ãƒ©ãƒ™ãƒ«ã‚’æ›¸ãæ›ãˆãŸå ´åˆã?ç”»é¢ã«è¡¨ç¤ºã•れã¦ã?‚‹åç§°ã¨
1006             * エラー時ã«è¡¨ç¤ºã•れるåç§°ãŒç•°ãªã‚‹ã“ã¨ãŒã‚りã¾ã—ãŸã€?
1007             * ãã“ã§ã€command=ENTRY 時ã«ã€ãƒ©ãƒ™ãƒ«ã‚’ã?DBTableModel ã®ã‚«ãƒ©ãƒ?‹ã‚‰å–å¾?
1008             * ã™ã‚‹ã‚ˆã†ã«è¨­å®šã§ãるよã†ã«ã—ã¾ã—ãŸã€?
1009             * DBTableModel ã«è©²å½“ã™ã‚‹ã‚«ãƒ©ãƒ?Œå­˜åœ¨ã—ãªã??åˆã?ラベルリソースã‹ã‚‰å–å¾—ã—ã¾ã™ã?
1010             * 通常ã¯ã€ã“ã®æ–¹æ³•ãŒä¸»ã§ã™ãŒã€?ŽåŽ»ã®äº’æ›æ€§ã‚’è?æ…®ã—ã?åˆæœŸå€¤ã¯ã€false ã«
1011             * ã—ã¦ã?¾ã™ã?
1012             *
1013             * @og.rev 5.4.3.4 (2012/01/12) æ–°è¦ä½œæ?
1014             *
1015             * @param   flg カラãƒ?ƒ©ãƒ™ãƒ«ã‚’使用ã™ã‚‹ã‹ã©ã?‹(true:ã™ã‚‹/false:ã—ãªã?
1016             */
1017    //      public void setUseTblClmLbl( final String flg ) {
1018    //              isTblClmLbl = nval( getRequestParameter( flg ),isTblClmLbl );
1019    //      }
1020    
1021            /**
1022             * ã€TAGã€‘ãƒªã‚¯ã‚¨ã‚¹ãƒˆå¤‰æ•°ã®æ­£è¦åŒ–を行ã†ã‚«ãƒ©ãƒ?‚’CSVå½¢å¼ã§è¤?•°æŒ?®šã—ã¾ã™ã?
1023             *
1024             * @og.tag
1025             * カラãƒ?ƒã‚§ãƒ?‚¯ã§æ­£è¦åŒ–ãŒè¡Œã‚れã¦ã?ªã??ラグインã«å¯¾ã—ã¦å¼·åˆ¶çš?«æ­£è¦åŒ–を行ã„ã¾ã™ã?
1026             * ã“ã?属æ?を利用ã—ãŸãƒã‚§ãƒ?‚¯ã‚’行ã£ãŸå?åˆã?ã€queryã‚¿ã‚°ã§PL/SQLを動作ã•ã›ã‚‹å ´åˆã«ã‚?
1027             * åŒå属æ?ã§ã‚«ãƒ©ãƒ??æŒ?®šã‚’行ã†å¿?¦ãŒã‚りã¾ã™ã?
1028             * (queryã‚¿ã‚°ã§checkNamesを利用ã—ãªã??åˆã?ã“ã?属æ?ã¯nullã«ã—ã¦ãã ã•ã„)
1029             * ã“ã?属æ?ã¯ãƒã‚§ãƒ?‚¯ã‚¿ã‚¤ãƒ—ãŒNEWã®å ´åˆã?ã¿æœ‰åйã§ã™ã?
1030             * リアルタイãƒ?ƒã‚§ãƒ?‚¯ã§ã“ã?機è?を利用ã—ãŸã??åˆã?ã€columnTagç­‰ã?optionAttributes
1031             * 属æ?ã«rtOption='checkNames=VIEW_DATE'ã®ã‚ˆã†ã«è¨˜è¿°ã—ã¦ãã ã•ã„ã€?
1032             *
1033             * @og.rev 5.4.3.8 (2012/01/24) æ–°è¦è¿½åŠ?
1034             * @og.rev 5.4.4.0 (2012/02/01) コメント修正
1035             *
1036             * @param       nm ãƒªã‚¯ã‚¨ã‚¹ãƒˆå¤‰æ•°ã®æ­£è¦åŒ–を行ã†ã‚«ãƒ©ãƒ?
1037             */
1038            public void setCheckNames( final String nm ) {
1039                    checkNames = nval( getRequestParameter( nm ),checkNames );
1040            }
1041    
1042            /**
1043             * ã“ã?オブジェクトã?æ–?­—å?表ç¾ã‚’è¿”ã—ã¾ã™ã?
1044             * 基本çš?«ãƒ?ƒãƒ?‚°ç›®çš?«ä½¿ç”¨ã—ã¾ã™ã?
1045             *
1046             * @return ã“ã?ã‚¯ãƒ©ã‚¹ã®æ–?­—å?表ç¾
1047             */
1048            @Override
1049            public String toString() {
1050                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
1051                                    .println( "VERSION"                     ,VERSION                )
1052                                    .println( "tableId"                     ,tableId                )
1053                                    .println( "command"                     ,command                )
1054                                    .println( "columns"                     ,columns                )
1055                                    .println( "nullCheck"           ,nullCheck              )
1056                                    .println( "mustAnyCheck"        ,mustAnyCheck   )
1057                                    .println( "maxRowCount"         ,maxRowCount    )
1058                                    .println( "minRowCount"         ,minRowCount    )
1059                                    .println( "checkType"           ,checkType              )
1060                                    .println( "matchKeys"           ,matchKeys              )
1061                                    .println( "matchVals"           ,matchVals              )
1062                                    .println( "realTime"            ,isRealTime             )
1063                                    .println( "bodyString"          ,StringUtil.htmlFilter( bodyString ) )
1064                                    .println( "Other..."            ,getAttributes().getAttribute() )
1065                                    .fixForm().toString() ;
1066            }
1067    }