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 * autofocus 【HTML5】指定した?力?カーソルが当たって自動的にフォーカスされます?
066 * roles 【TAG】ロールをセ?しま?
067 * debug 【TAG】デバッグ??を?力するかど?[true/false]を指定しま?初期値:false)
068 * > ... Body ...
069 * </og:button>
070 *
071 * ●使用?
072 * <og:button type="submit" name="test" value="1" lbl="test" /> LabelResource プロパティのラベル使用した?ききはlbl属?に、LabelResourceを使?す?
073 * <og:button type="submit" name="test" value="1" msg="MSG0103" /> MessageResource プロパティのラベル使用した?き?msg属?を使?す?
074 *
075 * @og.group 画面部?
076 *
077 * @version 4.0
078 * @author Kazuhiko Hasegawa
079 * @since JDK5.0,
080 */
081 public class ButtonTag extends HTMLTagSupport {
082 //* こ?プログラ??VERSION??を設定します? {@value} */
083 private static final String VERSION = "5.2.2.0 (2010/11/01)" ;
084
085 private static final long serialVersionUID = 522020101101L ;
086
087 private static final String CHECK_TYPE = "|submit|reset|button|" ;
088
089 /**
090 * Taglibの開始タグが見つかったときに処??doStartTag() ?オーバ?ライドします?
091 *
092 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応?ボディが存在する場合?みボディが呼ばれる対応?
093 * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属?対?
094 *
095 * @return 後続????( EVAL_BODY_BUFFERED )
096 */
097 @Override
098 public int doStartTag() {
099 // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属?対?
100 if( useTag() ) {
101 set( "body",getLongLabel() );
102 return( EVAL_BODY_BUFFERED ); // Body を評価する? extends BodyTagSupport ?
103 }
104 return ( SKIP_BODY ); // Body を評価しな?
105 }
106
107 /**
108 * Taglibのタグ本体を処??doAfterBody() ?オーバ?ライドします?
109 *
110 * @og.rev 3.1.1.0 (2003/03/28) ボディの?を取得する??、CommonTagSupport で行う?
111 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応?ボディが存在する場合?みボディが呼ばれる対応?
112 *
113 * @return 後続????(SKIP_BODY)
114 */
115 @Override
116 public int doAfterBody() {
117 String label = getBodyString();
118
119 if( label != null && label.length() > 0 ) {
120 set( "body",label );
121 }
122
123 return(SKIP_BODY);
124 }
125
126 /**
127 * ボタンを作?します?
128 *
129 * <button type="submit" name="名前" value="値">
130 *
131 * @return ボタンタグ??
132 */
133 @Override
134 protected String makeTag() {
135 return XHTMLTag.button( getAttributes() );
136 }
137
138 /**
139 * 【HTML】?タンのタイプ[submit/reset/button]を指定します?
140 *
141 * @og.tag
142 *
143 * submit:提?ボタンを作?します?
144 * reset:リセ?ボタンを作?します?
145 * button:押し?タンを作?します?
146 *
147 * @param type ボタンのタイプ[submit/reset/button]
148 */
149 public void setType( final String type ) {
150 String tp = getRequestParameter( type );
151 if( check( "|" + tp + "|" , CHECK_TYPE ) ) {
152 set( "type",tp );
153 }
154 else {
155 String errMsg = "type は、下記??より?してください。type=["
156 + tp + "] in [" + CHECK_TYPE + "]";
157 throw new HybsSystemException( errMsg );
158 }
159 }
160
161 /**
162 * 【HTML】?タンの名称を指定します?
163 *
164 * @og.tag
165 * @param name ボタンの名称
166 */
167 public void setName( final String name ) {
168 set( "name",getRequestParameter( name ) );
169 }
170
171 /**
172 * 【HTML】?タンの値を指定します?
173 *
174 * @og.tag
175 * @param value ボタンの値
176 */
177 public void setValue( final String value ) {
178 set( "value",getRequestParameter( value ) );
179 }
180
181 /**
182 * こ?オブジェクト???表現を返します?
183 * 基本???目?使用します?
184 *
185 * @return こ?クラスの??表現
186 */
187 @Override
188 public String toString() {
189 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
190 .println( "VERSION" ,VERSION )
191 .println( "Other..." ,getAttributes().getAttribute() )
192 .fixForm().toString() ;
193
194 }
195 }