001    /*
002     * Copyright (c) 2009 The openGion Project.
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     *     http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013     * either express or implied. See the License for the specific language
014     * governing permissions and limitations under the License.
015     */
016    package org.opengion.hayabusa.taglib;
017    
018    import org.opengion.hayabusa.common.HybsSystem;
019    import org.opengion.hayabusa.common.HybsSystemException;
020    import org.opengion.hayabusa.resource.GUIInfo;
021    import org.opengion.hayabusa.resource.LabelInterface;
022    import org.opengion.fukurou.util.XHTMLTag;
023    
024    import org.opengion.fukurou.util.StringUtil ;
025    import static org.opengion.fukurou.util.StringUtil.nval ;
026    
027    import java.util.Locale ;
028    
029    /**
030     * サブミãƒ?ƒˆボタンを表示するHTML拡張タグでã�?forward.jsp の commonForward タグと同時に使用しまã�?ã€?
031     *
032     * こã?タグは、value にæŒ?®šされた値??.jsp" の画面へサブミãƒ?ƒˆしますã?
033     * そã?際ã?command に設定された値ã‚?送信しますã?
034     * 従来は、value に、copy/modify/delete など、å?ç�?�™るJSPをå?別に設定してã�?�¾したのでã€?
035     * command と lbl が未設定時には、value の値を使用してã�?�¾したã€?下位互換性のため残してã�?�¾ã�?
036     * Ver5 になって、update.jsp ですべての処ç�?‚’行う方向で開発するに当たりã?
037     * command と lbl を記述するå¿?¦�がでてきましたã€?
038     * そこで、現在æœ?–°版では、action 属æ?を用意し、command を記述するã�?�‘で良くなりましたã€?
039     *
040     *    [action属æ?]  [初期設定されるパラメータ郡]
041     *      INSERT       value="update" command="INSERT" lbl="INSERT"  accesskey="I"
042     *      COPY         value="update" command="COPY"   lbl="COPY"    accesskey="C"
043     *      MODIFY       value="update" command="MODIFY" lbl="MODIFY"  accesskey="M"
044     *      DELETE       value="update" command="DELETE" lbl="DELETE"  accesskey="Z"
045     *      ENTRY        value="entry"  command="ENTRY"  lbl="ENTRY"   accesskey="E"
046     *      RESET        value="reset"  command="RESET"  lbl="ENTRY"   accesskey="R"
047     *
048     * columnWritable , noWritable の属æ?追åŠ?5.2.2.0 (2010/11/01))
049     * これは、各コマンドごとに、次ペã?ジの view のカラãƒ?±žæ?の設定に利用する属æ?ですã?
050     * Ver4 では、keys,vals のä¸?ˆ¬引数として設定してã�?�¾したがã?ここでは、専用属æ?として
051     * 用意してã�?�¾すã?
052     *
053     * @og.formSample
054     * ●形式ï¼?lt;og:submit value="…" lbl="…" />
055     * ●body?šなã�?
056     *
057     * ●Tag定義??
058     *   <og:submit
059     *       action             【TAG】アクション(INSERT,COPY,MODIFY,DELETE,ENTRY,RESET)を指定しまã�?
060     *       value              【TAG】forward したã�?¼ª?³?°ファイル名を記述しまã�?ä¾?insert,copy,modify,delete など)
061     *       command            【TAG】å?ç�?‚³マンドを登録しまã�?初期値:大æ–?­—ã? value 属æ?値[INSERT,COPY,MODIFY,DELETE など])
062     *       gamenId            【TAG】gamenId 属æ?を登録しまã�?
063     *       lbl                【TAG】ラベルリソースのラベルIDを指定しまã�?
064     *       target             【TAG】サブミãƒ?ƒˆ先ã?æ–?›¸を表示させるフレーãƒ??またã?ウィンドウの名前を指定しまã�?
065     *       keys               【TAG】ã?タン専用のリクエストキーをCSV形式でè¤?•°æŒ?®šしまã�?
066     *       vals               【TAG】ã?タン専用のリクエストå?をCSV形式でè¤?•°æŒ?®šしまã�?
067     *       roles              【TAG】ロールをセãƒ?ƒˆしまã�?
068     *       dbkeys             【TAG】commonForward の dbkeys にカラãƒ?Œ‡定を行いまã�?
069     *       optionAttributes   【TAG】JavaScript などの HTML基本タグ以外ã?属æ?をã?そã?ままタグとして使用しまã�?
070     *       columnWritable     【TAG】書き込み可能カラãƒ?��をã?カンマ区åˆ?‚Šで与えまã�?
071     *       noWritable         【TAG】書き込み不可カラãƒ?��をã?カンマ区åˆ?‚Šで与えまã�?
072     *       caseKey            【TAG】このタグ自体を利用するかどã�?�‹の条件キーを指定しまã�?初期値:null)
073     *       caseVal            【TAG】このタグ自体を利用するかどã�?�‹の条件値を指定しまã�?初期値:null)
074     *       caseNN             【TAG】指定ã?値がã?null/ゼロæ–?­—å? でなã�??å�?Not Null=NN)は、このタグは使用されまã�?初期値:true)
075     *       caseNull           【TAG】指定ã?値がã?null/ゼロæ–?­—å? の場合ã?、このタグは使用されまã�?初期値:true)
076     *       id                 【HTML】要ç´?�«対して固有ã?名前(id)をつける場合に設定しまã�?
077     *       lang               【HTML】要ç´??å†?®¹と他ã?属æ?値のè¨?ª?lang,xml:lang)を指定しまã�?
078     *       dir                【HTML】文字表記ã?方å�?dir)を指定しまã�?
079     *       title              【HTML】要ç´?�«対する補足çš?ƒ…報(title)を設定しまã�?
080     *       style              【HTML】この要ç´?�«対して適用させるスタイルシーãƒ?style)を設定しまã�?
081     *       readonly           【TAG】その部品に対して変更がå?来なã�?‚ˆã�?�«(readonly)æŒ?®šしまã�?サーバã?に送信されã‚?
082     *       disabled           【TAG】その部品に対してã€?�¸択や変更がå?来なã�?‚ˆã�?�«(disabled)æŒ?®šしまã�?サーバã?に送信されなã�?
083     *       tabindex           【HTML】タブã?移動é?(tabindex)を指定しまã�?0 ??32767)
084     *       accesskey          【HTML】アクセスキー(alt+キーで直接æŒ?®?を割り当てまã�?
085     *       clazz              【HTML】要ç´?�«対して class 属æ?を設定しまã�?
086     *       language           【TAG】タグå†?ƒ¨で使用するè¨?ªžコード[ja/en/zh/…]を指定しまã�?
087     *       onClick            【HTML】JavaScriptのイベンãƒ?onClick を設定しまã�?ä¾?onClick="renew('query.jsp','QUERY');")
088     *       onBlur             【HTML】JavaScriptのイベンãƒ?onBlur を設定しまã�?ä¾?onBlur="this.value=value.toUpperCase();")
089     *       onFocus            【HTML】JavaScriptのイベンãƒ?onFocus を設定しまã�?
090     *       ondblClick         【HTML】JavaScriptのイベンãƒ?ondblClick を設定しまã�?
091     *       onMouseDown        【HTML】JavaScriptのイベンãƒ?onMouseDown を設定しまã�?
092     *       onMouseUp          【HTML】JavaScriptのイベンãƒ?onMouseUp を設定しまã�?
093     *       onMouseMove        【HTML】JavaScriptのイベンãƒ?onMouseMove を設定しまã�?
094     *       onMouseOut         【HTML】JavaScriptのイベンãƒ?onMouseOut を設定しまã�?
095     *       onMouseOver        【HTML】JavaScriptのイベンãƒ?onMouseOver を設定しまã�?
096     *       autofocus          【HTML5】指定したå?力æ¬?�«カーソルが当たって自動的にフォーカスされますã?
097     *       img                【TAG】画像ã?タンを作る場合ã?、画像ファイルを指定しまã�?
098     *       debug              【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
099     *   />
100     *
101     * ●使用ä¾?
102     *     Ver5 推奨ケース?š指定ã? action 属æ?に設定された値に応じたã?value , command , lbl , accesskey をå?期化しますã?
103     *                      (5.2.2.0 (2010/11/01)以é™?
104     *     <og:writeCheck>
105     *         <og:submit  action="COPY"    noWritable="FGJ,UNIQ" />
106     *         <og:submit  action="MODIFY"  noWritable="CLM,FGJ,UNIQ" />
107     *         <og:submit  action="DELETE"  columnWritable="null" />
108     *         <og:submit  gamenId="GF9110" value="index" dbkeys="SYSTEM_ID,LANG,CLM" command="NEW" lbl="GF9100" target="CONTENTS" />
109     *         <br />
110     *     </og:writeCheck>
111     *
112     *     Ver4 ä¸?ˆ¬çš?�ªケース?švalue は共通になったためã?command と lbl の設定がå¿?¦?下位互換性のための設å®?
113     *     <og:writeCheck>
114     *         <og:submit  value="update"   command="COPY"   lbl="COPY"    accesskey="C" />
115     *         <og:submit  value="update"   command="MODIFY" lbl="MODIFY"  accesskey="M" />
116     *         <og:submit  value="update"   command="DELETE" lbl="DELETE"  accesskey="Z" />
117     *         <og:submit  gamenId="GF9110" value="index" dbkeys="SYSTEM_ID,LANG,CLM" command="NEW" lbl="GF9100" target="CONTENTS" />
118     *         <br />
119     *     </og:writeCheck>
120     *
121     *     従来のケース?švalue に設定された値JSPに対してサブミãƒ?ƒˆされますã?(下位互換性のための設å®?
122     *     <og:writeCheck>
123     *         <og:submit value="copy"     lbl="MSG0035" accesskey="C"  />
124     *         <og:submit value="modify"   lbl="MSG0036" accesskey="M"  />
125     *         <og:submit value="delete"   lbl="MSG0037" accesskey="Z"  />
126     *         <og:submit  gamenId="GF9110" value="index" dbkeys="SYSTEM_ID,LANG,CLM" command="NEW" lbl="GF9100" target="CONTENTS" />
127     *         <br />
128     *     </og:writeCheck>
129     *
130     * @og.rev 3.1.1.0 (2003/03/28) 新規作æ?
131     * @og.group 画面制御
132     *
133     * @version  4.0
134     * @author   Kazuhiko Hasegawa
135     * @since    JDK5.0,
136     */
137    public class SubmitTag extends HTMLTagSupport {
138            //* こã?プログラãƒ??VERSIONæ–?­—å?を設定しますã?       {@value} */
139            private static final String VERSION = "5.6.0.3 (2012/01/24)" ;
140    
141            private static final long serialVersionUID = 560320120124L ;
142    
143            //  5.2.2.0 (2010/11/01) 新規追åŠ?
144            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? 新è¦?{@value} */
145            public static final String ACT_INSERT  = "INSERT" ;
146            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? è¤?? {@value} */
147            public static final String ACT_COPY    = "COPY" ;
148            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? 変更 {@value} */
149            public static final String ACT_MODIFY  = "MODIFY" ;
150            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? 削除 {@value} */
151            public static final String ACT_DELETE  = "DELETE" ;
152            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? エントリー {@value} */
153            public static final String ACT_ENTRY   = "ENTRY" ;
154            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? リセãƒ?ƒˆ {@value} */
155            public static final String ACT_RESET   = "RESET" ;
156    
157            //  5.2.2.0 (2010/11/01) 新規追åŠ?
158            private static final String[] ACTION_LIST = new String[] {
159                    ACT_INSERT , ACT_COPY , ACT_MODIFY , ACT_DELETE , ACT_ENTRY , ACT_RESET };
160    
161            //  5.2.2.0 (2010/11/01) 新規追åŠ?
162            private enum ENUM_ACTION {
163                    // action  value      command    lbl       accesskey
164                       INSERT( "update" , "INSERT" , "INSERT" , "I" ),
165                       COPY  ( "update" , "COPY"   , "COPY"   , "C" ),
166                       MODIFY( "update" , "MODIFY" , "MODIFY" , "M" ),
167                       DELETE( "update" , "DELETE" , "DELETE" , "Z" ),
168                       ENTRY ( "entry"  , "ENTRY"  , "ENTRY"  , "E" ),
169                       RESET ( "reset"  , "RESET"  , "RESET"  , "R" ) ;
170    
171                    private final String defVal ;
172                    private final String defCmd ;
173                    private final String defLbl ;
174                    private final String defKey ;
175    
176                    ENUM_ACTION( final String val , final String cmd , final String lbl , final String key ) {
177                            defVal = val;
178                            defCmd = cmd;
179                            defLbl = lbl;
180                            defKey = key;
181                    }
182    
183                    public String getDefVal() { return defVal; }
184                    public String getDefCmd() { return defCmd; }
185                    public String getDefLbl() { return defLbl; }
186                    public String getDefKey() { return defKey; }
187            }
188    
189            private static final String TYPE = "submit" ;
190            private static final String NAME = "command" ;
191            private static final String MARGIN = "<span style=\"width: 3px;\" ></span>" ;
192    
193            private static final String IMG_PRE = "background: url(";                       // 5.5.0.0 (2012/03/01)
194            private static final String IMG_SUF = ") left top no-repeat;";          // 5.5.0.0 (2012/03/01)
195    
196            private String  action          = null;         // 5.2.2.0 (2010/11/01)
197            private String  command         = null;
198            private String  value           = null;
199            private String  gamenId         = null;
200            private String  target          = null;         // 3.5.5.2 (2004/04/02)
201            private String  dbkeys          = null;         // 4.0.0 (2007/05/23)
202    
203            private String  columnWritable  = null; // 5.2.2.0 (2010/11/01)
204            private String  noWritable              = null; // 5.2.2.0 (2010/11/01)
205    
206            private String bgImg            = null;         // 5.5.0.0 (2012/03/01)
207    
208            private String[] keys           = null;         // 3.5.5.5 (2004/04/23)
209            private String[] vals           = null;         // 3.5.5.5 (2004/04/23)
210    
211            /**
212             * Taglibの開始タグが見つかったときに処ç�?�™ã‚?doStartTag() ã‚?オーバã?ライドしますã?
213             *
214             * @og.rev 5.2.2.0 (2010/11/01) 新規追åŠ?
215             *
216             * @return      後続å?ç�??æŒ?¤º( SKIP_BODY )
217             */
218            @Override
219            public int doStartTag() {
220                    // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
221                    if( useTag() ) {
222                            // 5.1.8.0 (2010/07/01) 同時設定不可(columnWritable,noWritable) チェãƒ?‚¯
223                            if( columnWritable != null && noWritable != null ) {
224                                    String errMsg = "columnWritable と noWritable は同時にæŒ?®šできませんã€?
225                                                                    + "columnWritable = [" + columnWritable
226                                                                    + "] , noWritable = [" + noWritable
227                                                                    + "]";
228                                    throw new HybsSystemException( errMsg );
229                            }
230    
231                            // 5.2.2.0 (2010/11/01) action 属æ?による初期値の設å®?
232                            if( action != null ) {
233                                    ENUM_ACTION eact = ENUM_ACTION.valueOf( action );
234                                    if( value               == null ) { value   = eact.getDefVal(); }
235                                    if( command             == null ) { command = eact.getDefCmd(); }
236                                    if( getMsglbl() == null )        { setLbl( eact.getDefLbl() ); }
237                                    if( get( "accesskey" ) == null ) { set( "accesskey",eact.getDefKey() ); }
238                            }
239                    }
240                    return( SKIP_BODY );
241            }
242    
243            /**
244             * タグリブオブジェクトをリリースしますã?
245             * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
246             *
247             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
248             * @og.rev 3.5.5.2 (2004/04/02) target 属æ?の追åŠ?
249             * @og.rev 3.5.5.5 (2004/04/23) keys,vals 属æ?の追åŠ?
250             * @og.rev 5.2.2.0 (2010/11/01) action,columnWritable,noWritable 属æ?の追åŠ?
251             * @og.rev 5.5.0.0 (2012/03/01) bgImg追åŠ?
252             */
253            @Override
254            protected void release2() {
255                    super.release2();
256                    action          = null;         // 5.2.2.0 (2010/11/01)
257                    command         = null;
258                    value           = null;
259                    gamenId         = null;
260                    target          = null;         // 3.5.5.2 (2004/04/02)
261                    keys            = null;         // 3.5.5.5 (2004/04/23)
262                    vals            = null;         // 3.5.5.5 (2004/04/23)
263                    dbkeys          = null;         // 4.0.0 (2007/05/23)
264                    columnWritable  = null; // 5.2.2.0 (2010/11/01)
265                    noWritable              = null; // 5.2.2.0 (2010/11/01)
266                    bgImg           = null;         // 5.5.0.0 (2012/03/01)
267            }
268    
269            /**
270             * サブミãƒ?ƒˆボタンを作æ?しますã?
271             *
272             * @og.rev 3.3.1.1 (2003/07/03) ForwardManager クラスのå»?­¢。飛ã?先ã?キャãƒ?‚·ュをå»?­¢しますã?
273             * @og.rev 3.5.5.2 (2004/04/02) target 属æ?の追åŠ?
274             * @og.rev 3.5.5.9 (2004/06/07) target 属æ?をã?set ではなã�?add で追åŠ??
275             * @og.rev 3.5.5.9 (2004/06/07) target 属æ?をã?set ではなã�?add で追åŠ??
276             * @og.rev 4.0.0.0 (2005/11/30) title 属æ?が未設定時の処ç�?¿½åŠ?
277             * @og.rev 5.5.0.0 (2012/03/01) bgImg対å¿?
278             * @og.rev 5.6.0.3 (2012/01/24) accesskey に ゼロæ–?­—å?を指定したå?合ã?カãƒ?‚³()ã�?�‘が残ってしまã�??
279             *
280             * @return  サブミãƒ?ƒˆボタンタグ
281             */
282            @Override
283            protected String makeTag() {
284                    StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
285    
286                    if( value == null ) {
287                            String errMsg = "value に null がセãƒ?ƒˆされてã�?�¾すã?";
288                            throw new HybsSystemException( errMsg );
289                    }
290    
291                    String lbl = nval( getMsglbl(), value.toUpperCase( Locale.JAPAN ) );
292                    String accesskey = get( "accesskey" );
293    //              if( accesskey != null ) {
294                    if( accesskey != null && ! accesskey.isEmpty() ) {              // 5.6.0.3 (2012/01/24)
295                            lbl = lbl + "(" + accesskey + ")" ;
296                    }
297    
298                    // キャãƒ?‚·ュエントリ
299                    command = nval( command,value.toUpperCase(Locale.JAPAN) );
300                    String valueLink = getValueLink( gamenId , value );
301                    if( valueLink == null ) { return ""; }  //      アクセス不可時ã? null
302    
303                    // 3.3.1.1 (2003/07/03) ForwardManager クラスのå»?­¢。飛ã?先ã?キャãƒ?‚·ュをå»?­¢しますã?
304                    rtn.append( getHiddenTag( command, lbl, valueLink ) );
305                    rtn.append( HybsSystem.CR );
306    
307                    set( "type",TYPE );
308                    set( "name",NAME );
309                    set( "value",lbl );
310    
311                    // 3.5.5.2 (2004/04/02) target 属æ?の追åŠ?
312                    if( target != null ) {
313                            add( "onClick","this.form.target='" + target + "'",";" );       // 3.5.5.9 (2004/06/07)
314                    }
315    
316                    // 4.0.0 (2005/11/30) title 属æ?が未設定時の処ç�?¿½åŠ?
317                    if( get( "title" ) == null ) {
318                            LabelInterface msglbl = getLabelInterface();
319                            if( msglbl != null ) {
320                                    String desc = msglbl.getDescription();
321                                    if( desc != null && desc.length() > 0 ) {
322                                            set( "title",desc );
323                                    }
324                            }
325                    }
326    
327                    // 5.5.0.0 Img対å¿?スタイル属æ?に追åŠ?�™るã?
328                    if( bgImg != null && bgImg.length() > 0 ){
329                            add("style",IMG_PRE+bgImg+IMG_SUF);
330                    }
331    
332                    rtn.append( XHTMLTag.input( getAttributes() ) );
333                    rtn.append( MARGIN );
334                    rtn.append( HybsSystem.CR );
335    
336                    return rtn.toString() ;
337            }
338    
339            /**
340             * 画面?©?¤とvalue から、指定ã??µ?²?¬を作æ?しますã?
341             * 画面へのアクセス許可が与えられてã�?�ªã�??合ã?、null を返しますã?
342             *
343             * @og.rev 3.5.5.0 (2004/03/12) URLを求めるã?に、GUIInfo#getRealAddress() を使用するã€?
344             * @og.rev 4.0.0.0 (2005/01/31) GUIInfoの実アドレスのパラメータをè?慮するã€?
345             *
346             * @param   gamenId     画面?©?¤
347             * @param   value       飛ã?しå?(XXXX.jspのXXXX部åˆ?
348             *
349             * @return      ?µ?²?¬æ–?­—å?(アクセス不可時ã? null)
350             */
351            private String getValueLink( final String gamenId,final String value ) {
352                    String link = value + ".jsp";
353    
354                    if( gamenId != null && gamenId.length() > 0 ) {
355                            GUIInfo guiInfo = getGUIInfo( gamenId );                // 4.0.0 (2005/01/31)
356                            if( guiInfo == null ) { return null; }  // 見つからなã�??合ã?、アクセス不可
357    
358                            String address = guiInfo.getRealAddress( link );
359                            link = getRequestParameter( address );
360                    }
361    
362                    return link ;
363            }
364    
365            /**
366             * 【TAG】アクション(INSERT,COPY,MODIFY,DELETE,ENTRY,RESET)を指定しますã?
367             *
368             * @og.tag
369             * Ver5 になって、update.jsp ですべての処ç�?‚’行う方向で開発するに当たりã?
370             * command と lbl を記述するå¿?¦�がでてきましたã€?
371             * そこで、現在æœ?–°版では、action 属æ?を用意し、command を記述するã�?�‘で良くなりましたã€?
372             *
373             *    [action属æ?]  [初期設定されるパラメータ郡]
374             *      INSERT       value="update" command="INSERT" lbl="INSERT"  accesskey="I"
375             *      COPY         value="update" command="COPY"   lbl="COPY"    accesskey="C"
376             *      MODIFY       value="update" command="MODIFY" lbl="MODIFY"  accesskey="M"
377             *      DELETE       value="update" command="DELETE" lbl="DELETE"  accesskey="Z"
378             *      ENTRY        value="entry"  command="ENTRY"  lbl="ENTRY"   accesskey="E"
379             *      RESET        value="reset"  command="RESET"  lbl="ENTRY"   accesskey="R"
380             *
381             * @og.rev 5.2.2.0 (2010/11/01) 新規追åŠ?
382             *
383             * @param       act アクションæ–?­—å?
384             * @see         <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.SubmitTag.ACT_COPY">アクション定数</a>
385             */
386            public void setAction( final String act ) {
387                    action = getRequestParameter( act );
388    
389                    if( ! check( action, ACTION_LIST ) ) {
390    
391                            StringBuilder errMsg = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
392                            errMsg.append( "æŒ?®šã?アクションは実行できません。アクションエラー" );
393                            errMsg.append( HybsSystem.CR );
394                            errMsg.append( "action=[" ).append( action ).append( "] " );
395                            errMsg.append( HybsSystem.CR );
396    
397                            for( int i=0; i<ACTION_LIST.length; i++ ) {
398                                    errMsg.append( " | " );
399                                    errMsg.append( ACTION_LIST[i] );
400                            }
401                            errMsg.append( " | " );
402                            throw new HybsSystemException( errMsg.toString() );
403                    }
404            }
405    
406            /**
407             * 【TAG】forward したã�?¼ª?³?°ファイル名を記述しまã�?ä¾?insert,copy,modify,delete など)ã€?
408             *
409             * @og.tag
410             * ?ª?³?°ファイル名ã?、標準で、insert,copy,modify,delete などとæŒ?®šしますã?
411             * 実際には、各JSP画面(insert.jsp,copy.jsp,modify.jsp,delete.jsp )に
412             * リクエストが転送されますã?
413             * こã??ª?³?°ファイル名ã?、同ä¸?”»面?©?¤å†??フォルãƒ?�«属してã�?‚‹å¿?¦�がありますã?
414             * ここの?©?¤はã€?¼ª?³?°画面そã?もã?ですã?で、大æ–?­—小文字ã?区別されますã?
415             *
416             * @param   val ?ª?³?°ファイルå�?insert,copy,modify,delete など)
417             */
418            public void setValue( final String val ) {
419                    value = nval( getRequestParameter( val ),value );
420                    if( value == null ) {
421                            String errMsg = "value に null がセãƒ?ƒˆされてã�?�¾すã?";
422                            throw new HybsSystemException( errMsg );
423                    }
424            }
425    
426            /**
427             * 【TAG】gamenId 属æ?を登録しますã?
428             *
429             * @og.tag
430             * gamenId 属æ?は、別の画面にforward する場合に使用しますã?
431             * 実際は、forward ではなくã?sendRedirect されますã?
432             *
433             * @param   id gamenId 属æ?
434             */
435            public void setGamenId( final String id ) {
436                    gamenId = nval( getRequestParameter( id ),gamenId );
437            }
438    
439            /**
440             * éš?�—属æ?タグを取得しますã?
441             * å�??タンに設定された値をã?éš?�—フィールドに設定して受け渡ししますã?
442             *
443             * @og.rev 3.3.1.1 (2003/07/03) ForwardManager クラスのå»?­¢。飛ã?先ã?キャãƒ?‚·ュをå»?­¢しますã?
444             * @og.rev 3.5.5.5 (2004/04/23) 余計なボタン関連æƒ??を転送しなã�?‚ºに、キーを変更しますã?
445             * @og.rev 3.5.5.5 (2004/04/23) keys,vals 属æ?でæŒ?®šしたå?をã?出力しますã?
446             * @og.rev 3.5.5.5 (2004/04/23) hidden の出力に、XHTMLTag.hidden を使用しますã?
447             * @og.rev 3.8.0.8 (2005/10/03) gamenId が指定されてã�?‚‹場合ã?、BACK_GAMENID をå?力するã?
448             * @og.rev 5.2.2.0 (2010/11/01) columnWritable,noWritable 属æ?の追åŠ?
449             *
450             * @param       command         コマンãƒ?
451             * @param       lbl                     ラベルID
452             * @param       valueLink       飛ã?å…?RL
453             *
454             * @return      éš?�—属æ?タグ
455             */
456            private String getHiddenTag( final String command, final String lbl, final String valueLink ) {
457    
458                    StringBuilder strRet = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
459    
460                    String prefix = HybsSystem.NO_XFER_KEY + lbl ;
461                    strRet.append( XHTMLTag.hidden( prefix        ,valueLink ) );   // 3.5.5.5 (2004/04/23)
462                    strRet.append( XHTMLTag.hidden( prefix + "CMD",command   ) );   // 3.5.5.5 (2004/04/23)
463    
464                    // 3.5.5.5 (2004/04/23) keys,vals 属æ?でæŒ?®šしたå?をã?出力しますã?
465                    if( keys != null ) {
466                            if( keys.length != vals.length ) {
467                                    String errMsg = "SubmitTag の keys と vals の引数の個数が異なりますã?" + HybsSystem.CR
468                                                            + "keys=[" + StringUtil.array2csv( keys ) + "], vals=["
469                                                            + StringUtil.array2csv( vals ) + "]" ;
470                                    throw new HybsSystemException( errMsg );
471                            }
472                            for( int i=0; i<keys.length; i++ ) {
473                                    strRet.append( XHTMLTag.hidden( prefix + "KEY_" + keys[i],vals[i] ) );  // 3.5.5.5 (2004/04/23)
474                            }
475                    }
476    
477                    // 4.0.0 (2007/05/23) dbkeys が指定されてã�?‚‹場å�?
478                    if( dbkeys != null && dbkeys.length() > 0 ) {
479                            strRet.append( XHTMLTag.hidden( prefix + "KEY_dbkeys",dbkeys ) );       // 4.0.0 (2007/05/23)
480                    }
481    
482                    // 3.8.0.8 (2005/10/03) gamenId が指定されてã�?‚‹場合ã?、BACK_GAMENID をå?力するã?
483                    if( gamenId != null && gamenId.length() > 0 ) {
484                            String backGamenId = getGUIInfoAttri( "KEY" );
485                            strRet.append( XHTMLTag.hidden( prefix + "KEY_BACK_GAMENID",backGamenId ) );
486                    }
487    
488                    // 5.2.2.0 (2010/11/01) columnWritable,noWritable 属æ?の追åŠ?
489                    if( columnWritable != null ) {
490                            strRet.append( XHTMLTag.hidden( prefix + "KEY_columnWritable",columnWritable ) );
491                    }
492                    if( noWritable != null ) {
493                            strRet.append( XHTMLTag.hidden( prefix + "KEY_noWritable",noWritable ) );
494                    }
495    
496                    return strRet.toString();
497            }
498    
499            /**
500             * 【TAG】å?ç�?‚³マンドを登録しまã�?初期値:大æ–?­—ã? value 属æ?値[INSERT,COPY,MODIFY,DELETE など])ã€?
501             *
502             * @og.tag
503             * command 属æ?を指定しなã�??合ã?、このvalue 属æ?値がã?コマンドになりますã?
504             * value 属æ?に、insert,copy,modify,delete などとæŒ?®šされてã�?�Ÿ場合ã?ã€?
505             * それぞれ、INSERT,COPY,MODIFY,DELETE とã�?�†コマンドになりますã?
506             * コマンドã?、大æ–?­—ですã?
507             *
508             * @param       cmd コマンãƒ?
509             */
510            public void setCommand( final String cmd ) {
511                    command = nval( getRequestParameter( cmd ),command );
512                    if( command != null ) { command = command.toUpperCase(Locale.JAPAN); }
513            }
514    
515            /**
516             * 【TAG】サブミãƒ?ƒˆ先ã?æ–?›¸を表示させるフレーãƒ??またã?ウィンドウの名前を指定しますã?
517             *
518             * @og.tag サブミãƒ?ƒˆ先ã?フレーãƒ?��(ターゲãƒ?ƒˆ属æ?)を設定しますã?
519             *
520             * @og.rev 3.5.5.2 (2004/04/02) 新規追åŠ?
521             *
522             * @param       flag サブミãƒ?ƒˆ先ã?æ–?›¸のフレーãƒ?��(ターゲãƒ?ƒˆ属æ?)
523             */
524            public void setTarget( final String flag ) {
525                    target = nval( getRequestParameter( flag ),target );
526            }
527    
528            /**
529             * 【TAG】ã?タン専用のリクエストキーをCSV形式でè¤?•°æŒ?®šしますã?
530             *
531             * @og.tag
532             * こã?サブミãƒ?ƒˆボタンが押されたå?合ã?み、転送されるリクエスト情報の
533             * キーを設定できますã?カンマ区åˆ?‚Šでè¤?•°æŒ?®šできますã?
534             * vals 属æ?には、キーに対応するå?をã?設定してくださいã€?
535             * åˆ?§£方法ã?、CSV変数をå?にåˆ?§£してから、getRequestParameter で値を取得しますã?
536             * こうしなã�?�¨ãƒ??タ自身にカンマを持ってã�?‚‹場合にåˆ?§£をミスる為ですã?
537             *
538             * @og.rev 3.5.5.5 (2004/04/23) 新規追åŠ?
539             * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用
540             *
541             * @param       key ボタンが押された時に転送するキー
542             */
543            public void setKeys( final String key ) {
544                    keys = getCSVParameter( key );
545            }
546    
547            /**
548             * 【TAG】ã?タン専用のリクエストå?をCSV形式でè¤?•°æŒ?®šしますã?
549             *
550             * @og.tag
551             * キーに対応したå?をã?カンマ区åˆ?‚Šæ–?­—でè¤?•°æŒ?®šå?来ますã?
552             * æŒ?®šé?序ã?、キーと同じにしておいて下さã�??
553             * åˆ?§£方法ã?、CSV変数をå?にåˆ?§£してから、getRequestParameter で値を取得しますã?
554             * こうしなã�?�¨ãƒ??タ自身にカンマを持ってã�?‚‹場合にåˆ?§£をミスる為ですã?
555             *
556             * @og.rev 3.5.5.5 (2004/04/23) 新規追åŠ?
557             * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用
558             *
559             * @param       val keys属æ?に対応するå?
560             */
561            public void setVals( final String val ) {
562                    vals = getCSVParameter( val );
563            }
564    
565            /**
566             * 【TAG】commonForward の dbkeys にカラãƒ?Œ‡定を行いますã?
567             *
568             * @og.tag
569             * カラãƒ?Œ‡定ã?、CSV形å¼?カンマ区åˆ?‚Š)でæŒ?®šしてくださいã€?
570             * なおã?引数は、è?動的に受けるã?ではなくã?commonForward タグにã€?
571             * dbkeys="{&#064;dbkeys}" の記述はå¿?¦�ですã?
572             *
573             * @og.rev 4.0.0.0 (2007/05/23) 新規追åŠ?
574             *
575             * @param       keys    dbkeys のにカラãƒ?Œ‡å®?
576             */
577            public void setDbkeys( final String keys ) {
578                    dbkeys = nval( getRequestParameter( keys ),dbkeys );
579            }
580    
581            /**
582             * 【TAG】書き込み可能カラãƒ?��をã?カンマ区åˆ?‚Šで与えますã?
583             *
584             * @og.tag
585             * これは、書き込み不可カラãƒ?��のæŒ?®?noWritable)と同時にセãƒ?ƒˆする
586             * ことは出来ませんã€?
587             * なおã?カラãƒ?��の代わりにã€?null" を指定すると、なにも指定しなã�?�“と
588             * になりますã?つまりã?noWritable にすべてのカラãƒ?‚’æŒ?®šすることと
589             * 同じになりますã?(ãƒ?ƒ•ォルトなので、あまり意味はありませんã€?
590             * "*" を指定すると、すべてのカラãƒ?‚’(columnWritable)æŒ?®šしたことになりますã?
591             *
592             * @og.rev 5.2.2.0 (2010/11/01) 新規追åŠ?
593             *
594             * @param       columnName      例ï¼?OYA,KO,HJO,SU,DYSET,DYUPD"
595             * @see         #setNoWritable( String )
596             */
597            public void setColumnWritable( final String columnName ) {
598                    columnWritable = nval( getRequestParameter(columnName),null );
599            }
600    
601            /**
602             * 【TAG】書き込み不可カラãƒ?��をã?カンマ区åˆ?‚Šで与えますã?
603             *
604             * @og.tag
605             * これは、書き込み可能カラãƒ?��のæŒ?®?columnWritable)と同時にセãƒ?ƒˆする
606             * ことは出来ませんã€?
607             * なおã?カラãƒ?��の代わりにã€?null" を指定すると、なにも指定しなã�?�“と
608             * になりますã?つまりã?columnWritable にすべてのカラãƒ?‚’æŒ?®šすることと
609             * 同じになりますã?
610             * "*" を指定すると、すべてのカラãƒ?‚’(noWritable)æŒ?®šしたことになりますã?
611             *
612             * @og.rev 5.2.2.0 (2010/11/01) 新規追åŠ?
613             *
614             * @param       columnName      例ï¼?OYA,KO,HJO,SU,DYSET,DYUPD"
615             * @see         #setColumnWritable( String )
616             */
617            public void setNoWritable( final String columnName ) {
618                    noWritable = nval( getRequestParameter(columnName),null );
619            }
620    
621            /**
622             * 【TAG】画像ã?タンを作る場合ã?、画像ファイルを指定しますã?
623             *
624             * @og.tag
625             * 画像ã?タン作æ?支援の属æ?ですã?
626             * inputタグでtype=imageにした場合ã?IEではname,valueのセãƒ?ƒˆã�?
627             * 次の画面に渡されなã�?»•様になってã�?‚‹ためエンジンのsubmitでは
628             * 利用できませんã€?どのボタンが押されたかåˆ?�‹らなã�?
629             * そこで、typeはsubmitのままcssの背景画像としてここでæŒ?®šしã�?
630             * 画像を配置しますã?
631             * å†?ƒ¨çš?�«はbackground: url(imgFile) left top no-repeat;
632             * をstyleタグに書く事と同じですã?
633             * 高さ、å¹??把握できなã�?�Ÿめã?別途style属æ?でhight,widthを指定して下さã�??
634             *
635             * @og.rev 5.5.0.0 (2012/03/01) 新規追åŠ?
636             *
637             * @param       image   ボタンの背景画åƒ?
638             */
639            public void setImg( final String image ) {
640                    bgImg = nval( getRequestParameter(image),null );
641            }
642    
643            /**
644             * こã?オブジェクトã?æ–?­—å?表現を返しますã?
645             * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
646             *
647             * @return こã?クラスのæ–?­—å?表現
648             */
649            @Override
650            public String toString() {
651                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
652                                    .println( "VERSION"             ,VERSION        )
653                                    .println( "command"             ,command        )
654                                    .println( "value"               ,value          )
655                                    .println( "gamenId"             ,gamenId        )
656                                    .println( "target"              ,target         )
657                                    .println( "keys"                ,keys           )
658                                    .println( "vals"                ,vals           )
659                                    .println( "Other..."    ,getAttributes().getAttribute() )
660                                    .fixForm().toString() ;
661            }
662    }