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 に対応しています。 カスタムタグに定義されていない属性はそのまま素直に出力されます。
Cubby では JSP2.0 のファンクションを用意しています。 以下のタグライブラリ宣言を行うことでファンクションが使用できます。
<%@ taglib uri="http://www.seasar.org/cubby/functions" prefix="f" %>
ファンクション名 | 説明 |
out | HTML をエスケープします。 |
url | 文字列 をBase64形式でエンコードします。 |
dateFormat | Date 型のオブジェクトをフォーマットして出力します。 |
odd | 指定したカンマ区切りの文字列をインデックス値でサイクルして出力します。 |
contains | 配列やコレクションに指定したオブジェクトが含まれるかどうかを判定します。 |
containsKey | Map に指定したキーが含まれるかどうかを判定します。 |
containsValue | Map に指定したキーが含まれるかどうかを判定します。 |
ifrender | カスタムタグの属性の出力を制御します。 |
HTML をエスケープします。JSTL の out タグの代わりに使用します。 EL 式で出力された文字列はエスケープされないため、エスケープを行いたい場合はこの function を使用します。
使用例
${f:out(user.name)}さんこんにちは
文字列 をBase64形式でエンコードします。JSTL の url タグの代わりに使用します。 HttpServletRequest#getCharacterEncoding()で取得した文字コードでエンコードされます。
使用例
${f:url(wiki.pageName)}
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>
第1引数の条件が true のときは第2引数を属性の値として出力し、第1引数の条件が false のときは属性自体を出力しません。
条件によって disabled や checked などの属性の出力する・しないを制御したい場合に使用します。 出力する・しないの制御はカスタムタグで行うので、t:input/t:select/t:textarea と組み合わせて使用してください。
使用例
<f:input name="foo" value="${foo} disabled="$ifrender(condition == false, \"disabled\")" />
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>