2007-06-05

すぐに始める Struts2 (フォームでの日付入力編)


Struts2の Taglibには JavaScript+CSSで出来たリッチなUIコンポーネントが収録されている(DoJo Toolkitなるライブラリを使っているらしい)。今回は s:datetimepicker タグを使い、リッチなUIで日付の入力が可能なフォームを作ってみる。通常だと、フォームからの日付入力を受け取るには文字列型で入力→アクションクラス側でパースしてDate型変数に代入という手順を踏むところだが、この例では直接 java.util.Date型のプロパティにユーザの入力した日付がセットされる。

アクションクラス

この例では、フォームの表示と submitに一つのアクションクラスを使い回している

package yourpackage;

@Results({
@Result(name="success",value="dateinput.jsp")
}
)
public class DateInputAction {
/**
* Date型プロパティ。デフォルトでは newしたDateオブジェクト(現在時刻をさす)
* をセットする。
*/

private java.util.Date date = new java.util.Date();

/**
* この例では、日付入力ボックスの初期値表示時に呼び出される
*/

public java.util.Date getDate() {
return date;
}

/**
* フォームのsubmit時、日付入力ボックスの内容がここに渡される
*/

public void setDate(java.util.Date date) {
this.date = date;
}

public String execute()
{
return "success";
}
}

フォームJSP

<%@page contentType="text/html;charset=UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<s:head/>
</head>
<body>
<h1>日付入力のデモ</h1>
<s:form>
<s:datetimepicker
label=
"日付を選択してください"
displayFormat=
"yyyy/MM/dd"
name=
"date"/>
<s:submit />
</s:form>
</body>
</html>

解説

Struts2の組み込まれたWebアプリケーションのコンテキストでは、/struts 以下の URIに CSSや DoJoのようなJavaScriptといったリソースが自動的に配備されている。例えばコンテキスト名が myapp の場合、URL的には http://yourhost:port/myapp/struts/ 以下がそれにあたる。
HTMLの head要素内に <s:head/> というタグを書いておくことで、それらの呼び出しに必要なスクリプト等が挿入される。(言い方を変えると、これを書いておかないと s:datetimepickerのような リッチUIタグが動作しない)

struts1からの流儀だが、フォームUIタグの name属性に指定された名前は HTML要素の name属性として用いられると同時に、アクションクラス(Struts1の場合フォームBean)のプロパティ名に直接対応づけられ初期表示時にその値が用いられる。この例では s:datetimepickerが name="date"属性によりアクションクラスの dateプロパティと関連づけられている。

なお、action属性の省略された s:form要素はこのページを表示したアクション自身に対してsubmitされる。

ラベル:

0 件のコメント:

コメントを投稿

<< ホーム