Cubby のビューは JSP で作成します。
アクションからフォワードされた JSP では、以下の暗黙オブジェクトを使用することができます。
属性名 | 説明 | 型 | スコープ | セットされるタイミング |
action | forward したアクションのオブジェクト | org.seasar.cubby.action.Action | request | forward の直前 |
action のプロパティ名 | Action で public なゲッターがあるプロパティは自動的にリクエストスコープにセットされます。 (例)getXyz -> xyz |
それぞれのプロパティの型 | request | forward の直前 |
errors | エラー保持オブジェクト | org.seasar.cubby.action.ActionErrors | request | action メソッドの実行前 |
flash | リダイレクト時にメッセージなどを受け渡しするためのMap。 この Map は1度 get すると Map から自動的に除去(remove)されます。 |
java.util.Map | session | action メソッドの実行前 |
contextPath | request.getContextPath()の値 | java.lang.String | request | forward の直前 |
messages | messages.propertiesをMapにしたもの。 リクエストのロケールに対応したプロパティファイルを使用します。 |
java.util.Map | request | forward の直前 |
Cubby のカスタムタグはフォーム値の表示・復元・バリデーション結果の反映に使用します。 以下のタグライブラリ宣言を行うことでカスタムタグが使用できます。
<%@ taglib uri="http://www.seasar.org/cubby/tags" prefix="t" %>
Cubby のカスタムタグは、全て JSP2.0 の Dynamic-Attribute に対応しています。 カスタムタグに定義されていない属性はそのまま素直に出力されます。
用途 | タグ名 | 説明 |
入力フォーム作成 | form | form タグを出力します。 |
入力フォーム作成 | input | input タグを出力します。 |
入力フォーム作成 | select | select タグと option タグを出力します。 |
入力フォーム作成 | textarea | textarea タグを出力します。 |
2重サブミット防止 | token | 2重サブミットを防止します。 |
HTML の form タグを出力します。 Cubby の input/select/textarea タグで参照するフォーム用オブジェクトを指定するために使用します。
属性名 | 型 | EL式の使用 | 必須 | 説明 |
value | Object | ○ | ○ | フォームオブジェクトを指定します。 |
使用例
<t:form value="${action}"> ... <t:/form>
結果
<form> ... </form>
HTML の input タグを出力します。
属性名 | 型 | EL式の使用 | 必須 | 説明 |
name | String | ○ | ○ | value 属性として出力する値を取得するプロパティ名を指定します。 この属性の値は name 属性としてそのまま出力されます。 |
index | Integer | ○ | × | name 属性が同じフィールドが複数ある場合に、何番目の要素なのかを指定します。 |
type | String | ○ | ○ | text/password/checkbox/radio/hidden が指定できます。 この属性の値は type 属性としてそのまま出力されます。 |
value | String | ○ | ○ | type 属性が radio/checkbox の場合にポストされる値を指定します。この属性の値は value 属性としてそのまま出力されます。 この値と name 属性で指定したプロパティから取得した値が一致した場合には checked 属性が true になります。 type 属性が radio/checkbox の場合は必ず指定してください。 |
checkedValue | String,配列,java.util.Collection | ○ | × | formを指定しない場合に、比較対象となる値を指定します。 この値と value 属性で指定したプロパティから取得した値が一致した場合には checked 属性が true になります。 フォームオブジェクトを指定しなかった場合、かならず指定してください。 |
使用例
<t:input name="title"/>
結果
<input name="title" value="Todo Title"/>
HTML の select タグと option タグを出力します。
属性名 | 型 | EL式の使用 | 必須 | 説明 |
name | String | ○ | ○ | selected 属性を付加する option タグを決めるための値を取得するプロパティ名を指定します。 この属性の値は name 属性としてそのまま出力されます。 |
items | 配列,java.util.Collection | ○ | ○ | option タグの内容を表すリストを指定します。 |
valueProperty | String | ○ | ○ | items 属性で指定したリストの要素から、option タグの値として使用するプロパティ名を指定します。 |
labelProperty | String | ○ | ○ | items 属性で指定したリストの要素から、option タグの表示文字列として使用するプロパティ名を指定します。 |
emptyOption | Boolean | ○ | × | 空白の option タグを出力するかどうかを指定します。 省略した場合は true と見なして先頭に空白の option タグが出力されます。 |
emptyOptionLabel | String | ○ | × | 空白の option タグの表示文字列を指定します。 省略した場合は何も表示されません。 true と見なして先頭に空白の option タグが出力されます。 |
使用例
<t:select name="typeId" items="${todoTypes}" labelProperty="name" valueProperty="id"/>
結果
<select name="typeId"> <option name="1">TodoType 1</option> <option name="2">TodoType 2</option> </select>
HTML の textarea タグを出力します。
属性名 | 型 | EL式の使用 | 必須 | 説明 |
name | String | ○ | ○ | value 属性として出力する値を取得するプロパティ名を指定します。 この属性の値は name 属性としてそのまま出力されます。 |
index | Integer | ○ | × | name 属性が同じフィールドが複数ある場合に、何番目の要素なのかを指定します。 |
使用例
<t:textarea name="memo"/>
結果
<textarea name="memo">Memo 1</textarea>
2重サブミットを防止します。
属性名 | 型 | EL式の使用 | 必須 | 説明 |
name | String | ○ | × | input type="hidden"/ タグのname属性を指定します。通常は省略可能です。省略した場合、nameの属性名は「cubby.token」になります。 |
使用例
<t:form value="${action}"> <t:token / > <t:/form>
結果
<form> <input type="hidden" name="cubby.token" value="ランダムな文字列..."> </form>
アクション
public class TokenAction extends Action { ... public ValidationRules validation = new DefaultValidationRules() { @Override public void initialize() { add("cubby.token", new TokenValidator()); } }; ... @Form @Validation(errorPage="token.jsp", rules = "validation") public ActionResult message() { return new Forward("result.jsp"); } }
Cubby では JSP2.0 のファンクションを用意しています。 以下のタグライブラリ宣言を行うことでファンクションが使用できます。
<%@ taglib uri="http://www.seasar.org/cubby/functions" prefix="f" %>
ファンクション名 | 説明 |
out | HTML をエスケープします。 |
dateFormat | Date 型のオブジェクトをフォーマットして出力します。 |
odd | 指定したカンマ区切りの文字列をインデックス値でサイクルして出力します。 |
contains | 配列やコレクションに指定したオブジェクトが含まれるかどうかを判定します。 |
containsKey | Map に指定したキーが含まれるかどうかを判定します。 |
containsValue | Map に指定したキーが含まれるかどうかを判定します。 |
HTML をエスケープします。JSTL の out タグの代わりに使用します。 EL 式で出力された文字列はエスケープされないため、エスケープを行いたい場合はこの function を使用します。
使用例
${f:out(user.name)}さんこんにちは
Date 型のオブジェクトをフォーマットして出力します。JSTL の dateFormat タグの代わりに使用します。
使用例
${f:dateFormat(todo.limitDate, "yyyy-MM-dd")}
指定したカンマ区切りの文字列をインデックス値でサイクルして出力します。 主に行毎に色分けする場合にCSSのクラス名を出力する場合に使用します。 下記の例では、status.indexを2で割って余りが0の場合「odd」、1の場合「even」が出力されます。
使用例
<c:forEach var="todo" items="${action.todoList}" varStatus="status"> <tr class="${f:odd(status.index, 'odd,even')}"> ... </tr> </c:forEach>
配列やコレクションに指定したオブジェクトが含まれるかどうかを判定します。
使用例
<c:if test="${f:contains(idlist, '1001')}"> ... </c:if>
Map に指定したキーが含まれるかどうかを判定します。
使用例
<c:if test="${f:containsKey(idmap, '1001')}"> ... </c:if>
Map に指定した値が含まれるかどうかを判定します。
使用例
<c:if test="${f:containsValue(idmap, '値1')}"> ... </c:if>
JSP のページディレクティブや taglib ディレクティブは、各 JSP には記述せずにヘッダーファイルをインクルードして設定することを推奨します。
Servlet 2.4/JSP 2.0 の web.xml の設定として「include-prelude」ディレクティブが用意されていますので、これを使用してヘッダーファイルのインクルードを行います。
2分間チュートリアルの JSP は、共通ヘッダーを使用しているので、JSP の先頭に taglib ディレクティブの宣言がありません。
実際は、以下の「header.jsp」の内容が JSP の先頭に自動的に付加されてから、コンパイル・実行されています。
/common/header.jsp
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> <%@ taglib uri="http://www.seasar.org/cubby/tags" prefix="t" %> <%@ taglib uri="http://www.seasar.org/cubby/functions" prefix="f" %>
web.xml
</web-app> ... <jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <el-ignored>false</el-ignored> <page-encoding>UTF-8</page-encoding> <scripting-invalid>false</scripting-invalid> <include-prelude>/common/header.jsp</include-prelude> </jsp-property-group> </jsp-config> </web-app>