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 */ 016package org.opengion.hayabusa.taglib; 017 018import org.opengion.hayabusa.common.HybsSystemException; 019import 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 * ●形式:<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 */ 081public 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}