##### Cubby 2.0

- ホーム

##### スタートアップガイド

- 2分間チュートリアル
- 5分間チュートリアル

##### リファレンス

- セットアップ
- アクション
- バリデーション
- メッセージリソース
- JSP
  - JSP
  - 暗黙オブジェクト
  - カスタムタグ
    - タグリファレンス
  - ファンクション
  - JSP 共通ヘッダー
- Mayaa
- カスタマイズ
- JavaDoc
- TLDDoc
- Tips集
- 移行ガイド

##### プロジェクト文書

- プロジェクト情報
- プロジェクトレポート

##### モジュール

- Cubby
- Cubby Unit
- Cubby S2Container Plugin
- Cubby Guice Plugin
- Cubby Spring Plugin
- Cubby Gson Plugin
- Cubby OVal Plugin
- Cubby S2Container Integration Archetype
- Cubby Guice Integration Archetype
- Cubby Spring Integration Archetype
- Cubby Admin
- Cubby Distribution

## 目次

- JSP
- 暗黙オブジェクト
- カスタムタグ
  - タグリファレンス
- ファンクション
  - out
  - url
  - dateFormat
  - odd
  - contains
  - containsKey
  - containsValue
- JSP 共通ヘッダー

## 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 は１度 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>