フィールドタグは、対応する項目クラスと組み合わせて利用する方法と、単独で利用する方法があります。
対応する項目クラスと組み合わせて利用する
フィールドタグには対応する項目クラスがあります。例えば、uji:fieldStringタグにはFieldStringクラスが対応しています。
データBeanでこの項目クラスをプロパティとして定義します。
package sample; import com.fujitsu.uji.compo.*; import com.fujitsu.uji.DataBean; public class BodyBean extends DataBean { protected FieldString strData = new FieldString(); public FieldString getStrData() { return strData; } ... }
JSPではタグをデータBeanのプロパティに関連付けて記述します。
<FORM> <uji:fieldString bean="body" property="strData" /> ... </FORM>
フォームが送信されると、入力項目に入力されたデータは項目クラスに格納されます。また、画面表示時には、項目クラスが持つデータが表示されます。このとき、表示するデータがエスケープされて出力されます。エスケープ機能については、“16.8 エスケープ機能”を参照してください。
uji:labelタグには対応する項目クラスはありません。
また、フィールドタグと画面部品タグを組み合わせて使うことで、画面部品で利用したオブジェクトを引き継ぐことができます。
フィールドタグを単独で利用する
フィールドタグを利用する場合、データBeanに項目クラスではなく一般のString等の型が利用できます。
package sample; import com.fujitsu.uji.DataBean; public class BodyBean extends DataBean { protected String strData; public String getStrData() { return strData; } public void setStrData(String strData) { this.strData = strData; } ... }
JSPの記述は項目クラスを利用する場合と同じです。
<FORM> <uji:fieldString bean="body" property="strData" /> ... </FORM>
フォームが送信されると、入力項目に入力されたデータはpropertyアトリビュートで指定したプロパティに格納されます。また、画面表示時には、プロパティの値が表示されます。このとき、表示するデータがエスケープされて出力されます。エスケープ機能については、“16.8 エスケープ機能”を参照してください。
uji:pushButtonタグ、uji:labelタグは項目に対応しません。データBeanのプロパティ、タグのプロパティ指定は必要ありません。
<FORM> <uji:pushButton name="OK" /> ... </FORM>
項目クラスの代わりにデータBeanで使用できる型は、 String、boolean、byte、char、int、long、float、double、BigDecimal、BigInteger です。uji:fieldDateタグでは、さらにDate型も使用できます。これらの型を使用した場合、Webcoordinatorが型を判定し、フォームに入力されたデータを自動変換します。自動変換できない場合は、初期値(null、ゼロ)がデータBeanに設定されます。
フィールドの色や大きさを指定する
フィールドタグのアトリビュートで、色や大きさを指定します。
<FORM> <uji:fieldString bean="body" property="strData" width="120" height="40" background="yellow" foreground="blue" borderWidth="3" fontSize="12pt" /> ... </FORM>
文字色など設定の一部は、項目クラスのプロパティで変更できます。項目クラスで指定した内容はタグのアトリビュートよりも優先されます。
dataBean.getStrData().setForeground("red");
項目クラスを使用しない場合の指定方法は、“16.4.6 外付け属性の利用”を参照してください。
数値フォーマットを指定する
数値項目のフォーマットの指定が可能です。
<FORM> <uji:fieldLong bean="body" property="longData" outputFormat="\\#,##0" /> ... </FORM>
入力データは一般的な形式は自動的に変換されます。例として、整数フィールドでは"-1234"、"\2,000"のような文字列は自動変換します。
特別な形式で入力する場合には、項目クラスを継承し、変換用のメソッドを作成する必要があります。
package sample; import java.text.*; import com.fujitsu.uji.compo.*; public class MyFieldDate extends FieldDate { // 入力文字列originalを一般形に変換する public String parse(String original) { try { SimpleDateFormat formatter = new SimpleDateFormat("yyMMdd"); return formatter.parse(text).toString(); } catch(Exception e) { return "0000/01/01"; // エラー用の値 } } }
入力値の範囲をチェックする
項目クラスに数値範囲の上限下限や最大入力文字数を設定することで、範囲チェックを容易に記述することができます。以下は、数値範囲の上限と下限を設定する例です。
... 表示前 dataBean.getLongData().setMinimumValue(0); dataBean.getLongData().setMaximumValue(100); ... 入力後 if(dataBean.getLongData().getErrorCode() != FieldLong.NO_ERROR) { ... エラー }
uji:formタグと併用することにより、チェックのためのJavaScriptコードを自動生成します。送信時にチェックを実行し、エラーの場合、ブラウザ画面にメッセージを表示します。
<uji:form name="myform"> <uji:fieldLong bean="body" property="longData" minimumValue="0" maximumValue="100" /> ... </uji:form>
ポイント
最大入力文字数を設定して入力文字数をチェックする場合、 補助文字の数え方を初期化パラメタuji.taglib.awareOfSupplementaryCharで設定できます。詳細は“13.2 初期化パラメタ”を参照してください。