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 に対応しています。 カスタムタグに定義されていない属性はそのまま素直に出力されます。

用途 タグ名 説明
入力フォーム作成 form form タグを出力します。
入力フォーム作成 input input タグを出力します。
入力フォーム作成 select select タグと option タグを出力します。
入力フォーム作成 textarea textarea タグを出力します。
2重サブミット防止 token 2重サブミットを防止します。
カスタムタグ一覧

form

HTML の form タグを出力します。 Cubby の input/select/textarea タグで参照するフォーム用オブジェクトを指定するために使用します。

属性名 EL式の使用 必須 説明
value Object フォームオブジェクトを指定します。

使用例

<t:form value="${action}">
  ...
<t:/form>

結果

<form>
  ...
</form>

input

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"/>

select

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>

textarea

HTML の textarea タグを出力します。

属性名 EL式の使用 必須 説明
name String value 属性として出力する値を取得するプロパティ名を指定します。
この属性の値は name 属性としてそのまま出力されます。
index Integer × name 属性が同じフィールドが複数ある場合に、何番目の要素なのかを指定します。

使用例

<t:textarea name="memo"/>

結果

<textarea name="memo">Memo 1</textarea>

token

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 に指定したキーが含まれるかどうかを判定します。
ファンクション一覧

out

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

使用例

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

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>

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>