JSP

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 カスタムタグの属性の出力を制御します。
ファンクション一覧

out

HTML をエスケープします。JSTL の out タグの代わりに使用します。 EL 式で出力された文字列はエスケープされないため、エスケープを行いたい場合はこの function を使用します。

使用例

${f:out(user.name)}さんこんにちは

url

文字列 をBase64形式でエンコードします。JSTL の url タグの代わりに使用します。 HttpServletRequest#getCharacterEncoding()で取得した文字コードでエンコードされます。

使用例

${f:url(wiki.pageName)}

dateFormat

Date 型のオブジェクトをフォーマットして出力します。JSTL の dateFormat タグの代わりに使用します。

使用例

${f:dateFormat(todo.limitDate, "yyyy-MM-dd")}

odd

指定したカンマ区切りの文字列をインデックス値でサイクルして出力します。 主に行毎に色分けする場合に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>

contains

配列やコレクションに指定したオブジェクトが含まれるかどうかを判定します。

使用例

<c:if test="${f:contains(idlist, '1001')}">
  ...
</c:if>

containsKey

Map に指定したキーが含まれるかどうかを判定します。

使用例

<c:if test="${f:containsKey(idmap, '1001')}">
  ...
</c:if>

containsValue

Map に指定した値が含まれるかどうかを判定します。

使用例

<c:if test="${f:containsValue(idmap, '値1')}">
  ...
</c:if>

ifrender

第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 共通ヘッダー

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>