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