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.HybsSystemException;
019 import org.opengion.fukurou.util.XHTMLTag;
020
021 /**
022 * ボタンを作?するHTML拡張タグです?
023 *
024 * ボタンごとに?な画面を選び出して制御を転送することができます?
025 * BODY 部?ラベル?調?などのタグを記述すれば、そのままボタンとして表示されます?
026 * [ヒン?
027 * buttonタグとinputタグが生成する?タンは、機??は同等ですが、buttonタグの方?
028 * レタリング能力があり、?容を持つことができます?
029 * 例えば、画像を?に持つbutton機?は、type属?がimageのinputタグと
030 * そっくり同じですが、buttonタグは?を持つことができます?
031 *
032 * @og.formSample
033 * ●形式?lt;og:button type="…" name="…" value="…" lbl="…" />
034 * ●body?あ?EVAL_BODY_BUFFERED:BODYを評価し?{@XXXX} を解析しま?
035 *
036 * ●Tag定義??
037 * <og:button
038 * type ○?HTML】?タンのタイプ[submit/reset/button]を指定しま???)?
039 * name 【HTML】?タンの名称を指定しま?
040 * value 【HTML】?タンの値を指定しま?
041 * caseKey 【TAG】このタグ自体を利用するかど?の条件キーを指定しま?初期値:null)
042 * caseVal 【TAG】このタグ自体を利用するかど?の条件値を指定しま?初期値:null)
043 * caseNN 【TAG】指定?値が?null/ゼロ?? でな???Not Null=NN)は、このタグは使用されま?初期値:true)
044 * caseNull 【TAG】指定?値が?null/ゼロ?? の場合?、このタグは使用されま?初期値:true)
045 * lbl 【TAG】ラベルリソースのラベルIDを指定しま?
046 * id 【HTML】要?対して固有?名前(id)をつける場合に設定しま?
047 * lang 【HTML】要???と他?属?値の??lang,xml:lang)を指定しま?
048 * dir 【HTML】文字表記?方?dir)を指定しま?
049 * title 【HTML】要?対する補足?報(title)を設定しま?
050 * style 【HTML】この要?対して適用させるスタイルシー?style)を設定しま?
051 * disabled 【TAG】その部品に対して?択や変更が?来な??(disabled)?しま?サーバ?に送信されな?
052 * tabindex 【HTML】タブ?移動?(tabindex)を指定しま?0 ??32767)
053 * accesskey 【HTML】アクセスキー(alt+キーで直接??を割り当てま?
054 * clazz 【HTML】要?対して class 属?を設定しま?
055 * language 【TAG】タグ?で使用する?コード[ja/en/zh/…]を指定しま?
056 * onClick 【HTML】JavaScriptのイベン?onClick を設定しま??onClick="renew('query.jsp','QUERY');")
057 * onBlur 【HTML】JavaScriptのイベン?onBlur を設定しま??onBlur="this.value=value.toUpperCase();")
058 * onFocus 【HTML】JavaScriptのイベン?onFocus を設定しま?
059 * ondblClick 【HTML】JavaScriptのイベン?ondblClick を設定しま?
060 * onMouseDown 【HTML】JavaScriptのイベン?onMouseDown を設定しま?
061 * onMouseUp 【HTML】JavaScriptのイベン?onMouseUp を設定しま?
062 * onMouseMove 【HTML】JavaScriptのイベン?onMouseMove を設定しま?
063 * onMouseOut 【HTML】JavaScriptのイベン?onMouseOut を設定しま?
064 * onMouseOver 【HTML】JavaScriptのイベン?onMouseOver を設定しま?
065 * roles 【TAG】ロールをセ?しま?
066 * debug 【TAG】デバッグ??を?力するかど?[true/false]を指定しま?初期値:false)
067 * > ... Body ...
068 * </og:button>
069 *
070 * ●使用?
071 * <og:button type="submit" name="test" value="1" lbl="test" /> LabelResource プロパティのラベル使用した?ききはlbl属?に、LabelResourceを使?す?
072 * <og:button type="submit" name="test" value="1" msg="MSG0103" /> MessageResource プロパティのラベル使用した?き?msg属?を使?す?
073 *
074 * @og.group 画面部?
075 *
076 * @version 4.0
077 * @author Kazuhiko Hasegawa
078 * @since JDK5.0,
079 */
080 public class ButtonTag extends HTMLTagSupport {
081 //* こ?プログラ??VERSION??を設定します? {@value} */
082 private static final String VERSION = "5.2.2.0 (2010/11/01)" ;
083
084 private static final long serialVersionUID = 522020101101L ;
085
086 private static final String CHECK_TYPE = "|submit|reset|button|" ;
087
088 /**
089 * Taglibの開始タグが見つかったときに処??doStartTag() ?オーバ?ライドします?
090 *
091 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応?ボディが存在する場合?みボディが呼ばれる対応?
092 * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属?対?
093 *
094 * @return 後続????( EVAL_BODY_BUFFERED )
095 */
096 @Override
097 public int doStartTag() {
098 // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属?対?
099 if( useTag() ) {
100 set( "body",getLongLabel() );
101 return( EVAL_BODY_BUFFERED ); // Body を評価する? extends BodyTagSupport ?
102 }
103 return ( SKIP_BODY ); // Body を評価しな?
104 }
105
106 /**
107 * Taglibのタグ本体を処??doAfterBody() ?オーバ?ライドします?
108 *
109 * @og.rev 3.1.1.0 (2003/03/28) ボディの?を取得する??、CommonTagSupport で行う?
110 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応?ボディが存在する場合?みボディが呼ばれる対応?
111 *
112 * @return 後続????(SKIP_BODY)
113 */
114 @Override
115 public int doAfterBody() {
116 String label = getBodyString();
117
118 if( label != null && label.length() > 0 ) {
119 set( "body",label );
120 }
121
122 return(SKIP_BODY);
123 }
124
125 /**
126 * ボタンを作?します?
127 *
128 * <button type="submit" name="名前" value="値">
129 *
130 * @return ボタンタグ??
131 */
132 @Override
133 protected String makeTag() {
134 return XHTMLTag.button( getAttributes() );
135 }
136
137 /**
138 * 【HTML】?タンのタイプ[submit/reset/button]を指定します?
139 *
140 * @og.tag
141 *
142 * submit:提?ボタンを作?します?
143 * reset:リセ?ボタンを作?します?
144 * button:押し?タンを作?します?
145 *
146 * @param type ボタンのタイプ[submit/reset/button]
147 */
148 public void setType( final String type ) {
149 String tp = getRequestParameter( type );
150 if( check( "|" + tp + "|" , CHECK_TYPE ) ) {
151 set( "type",tp );
152 }
153 else {
154 String errMsg = "type は、下記??より?してください。type=["
155 + tp + "] in [" + CHECK_TYPE + "]";
156 throw new HybsSystemException( errMsg );
157 }
158 }
159
160 /**
161 * 【HTML】?タンの名称を指定します?
162 *
163 * @og.tag
164 * @param name ボタンの名称
165 */
166 public void setName( final String name ) {
167 set( "name",getRequestParameter( name ) );
168 }
169
170 /**
171 * 【HTML】?タンの値を指定します?
172 *
173 * @og.tag
174 * @param value ボタンの値
175 */
176 public void setValue( final String value ) {
177 set( "value",getRequestParameter( value ) );
178 }
179
180 /**
181 * こ?オブジェクト???表現を返します?
182 * 基本???目?使用します?
183 *
184 * @return こ?クラスの??表現
185 */
186 @Override
187 public String toString() {
188 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
189 .println( "VERSION" ,VERSION )
190 .println( "Other..." ,getAttributes().getAttribute() )
191 .fixForm().toString() ;
192
193 }
194 }