SeamFramework.org Community Documentation

- 前のページ
- 次のページ

## 第33章 Seam JSF コントロール

Seam には Seam での作業に便利な JSF コントロールがいくつか含まれています。これらは組み込み JSF コントロールと他のサードパーティライブラリのコントロールの機能補完を目的としています。 Seam と併用する際は、JBoss RichFaces、Apache MyFaces Trinidad タグライブラリの使用を推奨します。 Tomahawk タグライブラリの使用はお薦めできません。

## 33.1. タグ

これらのタグを使用するには、 以下のように使用するページで "`s`" 名前空間を定義します (facelets 固有)。

    <html xmlns="http://www.w3.org/1999/xhtml"

          xmlns:s="http://jboss.com/products/seam/taglib"

    >

UIサンプル(examples/ui)ではいくつかのタグの使用例を示しています。

### 33.1.1. ナビゲーション コントロール

#### 33.1.1.1. `<s:button>`

詳細

対話の伝搬を制御するアクションの起動をサポートするボタンです。 フォームはサブミットしません。

属性

- `value` — ラベル。

- `action` — アクションリスナーを指定する値バインディング。

- `view` — リンクする JSF view id 。

- `fragment` — リンクするフラグメント ID 。

- `disabled` — リンクが無効かどうか

- `propagation` — 対話の伝播方式の指定 : `begin`, `join`, `nest`, `none` または `end` 。

- `pageflow` — 開始するページフロー定義 (`propagation="begin"` または `propagation="join"` の場合のみ有効)。

使い方

    <s:button id="cancel"

              value="Cancel"

              action="#{hotelBooking.cancel}"/>

`<s:link />` には、 `view` と `action` の両方が指定可能です。 この場合、指定されたビューへのリダイレクトが発生した時点でアクションが呼ばれます。

`<s:button />`ではアクションリスナー(デフォルトのJSFアクションリスナーも含む)の使用はサポートされません。

#### 33.1.1.2. `<s:conversationId>`

詳細

JSF リンクあるいはボタンに対話 ID を追加します ( 例 `<h:commandLink />`、`<s:button />`)。

属性

なし

#### 33.1.1.3. `<s:taskId>`

詳細

タスクが`#{task}`で利用可能な場合、リンク(または同様のJSFコントロール)にタスクIDを付加します。

属性

なし

#### 33.1.1.4. `<s:link>`

詳細

対話の伝搬を制御するアクションの起動をサポートするリンクです。 フォームはサブミットしません。

`<s:link />`ではアクションリスナー(デフォルトのJSFアクションリスナーも含む)の使用はサポートされません。

属性

- `value` — ラベル。

- `action` — アクションリスナーを指定する値バインディング。

- `view` — リンクする JSF view id 。

- `fragment` — リンクするフラグメント ID 。

- `disabled` — リンクが無効かどうか

- `propagation` — 対話の伝播方式の指定 : `begin`, `join`, `nest`, `none` または `end` 。

- `pageflow` — 開始するページフロー定義 (`propagation="begin"` または `propagation="join"` の場合のみ有効)

使い方

    <s:link id="register" view="/register.xhtml"

            value="Register New User"/>

`<s:link />` には、 `view` と `action` の両方が指定可能です。 この場合、指定されたビューへのリダイレクトが発生した時点でアクションが呼ばれます。

#### 33.1.1.5. `<s:conversationPropagation>`

詳細

コマンドリンクやボタン (または同様の JSF コントロール) に対する対話の伝搬をカスタマイズします。 Facelets 固有です。

属性

- 対話の伝播方式を指定します : `begin`、`join`、`nest`、`none` または `end`

- `pageflow` — 開始するページフロー定義 (`propagation="begin"` または `propagation="join"` の場合のみ有効)

使い方

    <h:commandButton value="Apply" action="#{personHome.update}">

       <s:conversationPropagation type="join" />

    </h:commandButton

    >

#### 33.1.1.6. `<s:defaultAction>`

詳細

enterキーでフォームをサブミットしたときに実行するデフォルトアクションを指定します。

今のところ、ボタン (例えば`<h:commandButton />`、`<a:commandButton />` または `<tr:commandButton />`)の中にネストすることのみできます。

元となるアクションにはIDを指定しなければいけません。フォームには一つのデフォルトアクションしか持てません。

属性

なし

使い方

    <h:commandButton id="foo" value="Foo" action="#{manager.foo}">

       <s:defaultAction />

    </h:commandButton

    >

### 33.1.2. コンバータとバリデータ

#### 33.1.2.1. `<s:convertDateTime>`

詳細

Seam タイムゾーン内でデータ変換または時刻変換を行います。

属性

なし

使い方

    <h:outputText value="#{item.orderDate}">

       <s:convertDateTime type="both" dateStyle="full"/>

    </h:outputText

    >

#### 33.1.2.2. `<s:convertEntity>`

詳細

エンティティコンバータを現在のコンポーネントに割り当てます。 ラジオボタンコントロールおよびドロップダウンコントロールに役立ちます。

コンバータは管理されたどのようなエンティティとも動作します。単純なエンティティでも複合エンティティでも同様です。フォームのサブミット時にコンバータはJSFコントロールで宣言された項目を見つけることができるべきです。さもなければバリデーションエラーを受け取ることになるでしょう。

属性

なし

設定

`<s:convertEntity />` は Seam管理トランザクション (Seam managed transaction) ( 項9.2. 「Seam 管理トランザクション」 参照) とともに使う必要があります。

管理された永続コンテキスト (Managed Persistence Context) が `entityManager` と呼ばれていないならば、 components.xmlで設定する必要があります:

    <components xmlns="http://jboss.com/products/seam/components"
                xmlns:ui="http://jboss.com/products/seam/ui">

       <ui:jpa-entity-loader entity-manager="#{em}" />

管理された Hibernate セッション を使用するならば、components.xmlで設定する必要があります:

    <components xmlns="http://jboss.com/products/seam/components"
                xmlns:ui="http://jboss.com/products/seam/ui">

       <ui:hibernate-entity-loader />

管理された Hibernate セッション (Managed Hibernate Session) が `session` と呼ばれていないならば、components.xmlで設定する必要があります:

    <components xmlns="http://jboss.com/products/seam/components"
                xmlns:ui="http://jboss.com/products/seam/ui">

       <ui:hibernate-entity-loader session="#{hibernateSession}" />

ひとつ以上のエンティティマネージャをエンティティコンバータと使いたい場合、`components.xml` でそれぞれのエンティティマネージャに対してエンティティコンバータのコピーを作成することができます。エンティティコンバータがどのようにエンティティローダに永続化処理を委譲するのか注意してください:

    <components xmlns="http://jboss.com/products/seam/components"
                xmlns:ui="http://jboss.com/products/seam/ui">

       <ui:entity-converter name="standardEntityConverter" entity-loader="#{standardEntityLoader}" />

       <ui:jpa-entity-loader name="standardEntityLoader" entity-manager="#{standardEntityManager}" />

       <ui:entity-converter name="restrictedEntityConverter" entity-loader="#{restrictedEntityLoader}" />

       <ui:jpa-entity-loader name="restrictedEntityLoader" entity-manager="#{restrictedEntityManager}" />

    <h:selectOneMenu value="#{person.continent}">
       <s:selectItems value="#{continents.resultList}" var="continent"
                      label="#{continent.name}" />
        <f:converter converterId="standardEntityConverter" />
    </h:selectOneMenu
    >

使い方

    <h:selectOneMenu value="#{person.continent}" required="true">

       <s:selectItems value="#{continents.resultList}" var="continent"

                      label="#{continent.name}"

                      noSelectionLabel="Please Select..."/>

       <s:convertEntity />

    </h:selectOneMenu

    >

#### 33.1.2.3. `<s:convertEnum>`

詳細

enum コンバータを現在のコンポーネントに割り当てます。 おもにラジオボタンコントロールおよびドロップダウンコントロールに役立ちます。

属性

なし

使い方

    <h:selectOneMenu value="#{person.honorific}">

       <s:selectItems value="#{honorifics}" var="honorific"

                     label="#{honorific.label}"

                     noSelectionLabel="Please select" />

       <s:convertEnum />

    </h:selectOneMenu

    >

#### 33.1.2.4. `<s:convertAtomicBoolean>`

詳細

`java.util.concurrent.atomic.AtomicBoolean` のための `javax.faces.convert.Converter` です。

属性

なし

使い方

    <h:outputText value="#{item.valid}">
       <s:convertAtomicBoolean />
    </h:outputText
    >

#### 33.1.2.5. `<s:convertAtomicInteger>`

詳細

`java.util.concurrent.atomic.AtomicInteger` のための `javax.faces.convert.Converter` です。

属性

なし

使い方

    <h:outputText value="#{item.id}">
       <s:convertAtomicInteger />
    </h:outputText
    >

#### 33.1.2.6. `<s:convertAtomicLong>`

詳細

`java.util.concurrent.atomic.AtomicLong` のための `javax.faces.convert.Converter` です。

属性

なし

使い方

    <h:outputText value="#{item.id}">
       <s:convertAtomicLong />
    </h:outputText
    >

#### 33.1.2.7. `<s:validateEquality>`

詳細

入力コントロール内にネストし、その親の値と参照先のコントロールの値が同じであること (または同じでないこと) を検証するタグです。

属性

- `for` — 検証の対象となるコントロールのID

- `message` — 失敗時に表示されるメッセージ

- `required` — false はフィールド内に値がすべて入力されたかどうかのチェックを無効にする

- `messageId` — 失敗時に表示するメッセージID

- `operator` — 値を比較するときに使用するオペレータ。有効なオペレータは次のとおり。

  - `equal` — value.equals(forValue) を検証する

  - `not_equal` — !value.equals(forValue) を検証する

  - `greater` — ((Comparable)value).compareTo(forValue) > 0 を検証する

  - `greater_or_equal` — ((Comparable)value).compareTo(forValue) >= 0 を検証する

  - `less` — ((Comparable)value).compareTo(forValue) <0 を検証する

  - `less_or_equal` — ((Comparable)value).compareTo(forValue) <= 0 を検証する

使い方

    <h:inputText id="name" value="#{bean.name}"/>
    <h:inputText id="nameVerification" >
       <s:validateEquality for="name" />
    </h:inputText
    >

#### 33.1.2.8. `<s:validate>`

詳細

非視覚的なコントロールです。 Hibernate Validator を使用してバインドされたプロパティに対して JSF 入力フィールドを確認します。

属性

なし

使い方

    <h:inputText id="userName" required="true"

                 value="#{customer.userName}">

      <s:validate />

    </h:inputText>

    <h:message for="userName" styleClass="error" />

#### 33.1.2.9. `<s:validateAll>`

詳細

非視覚的なコントロールです。 Hibernate Validator を使ってそのバインドされたプロパティに対しすべての子 JSF 入力フィールドを確認します。

属性

なし

使い方

    <s:validateAll>

      <div class="entry">

        <h:outputLabel for="username"

    >Username:</h:outputLabel>

        <h:inputText id="username" value="#{user.username}"

                     required="true"/>

        <h:message for="username" styleClass="error" />

      </div>

      <div class="entry">

        <h:outputLabel for="password"

    >Password:</h:outputLabel>

        <h:inputSecret id="password" value="#{user.password}"

                       required="true"/>

        <h:message for="password" styleClass="error" />

      </div>

      <div class="entry">

        <h:outputLabel for="verify"

    >Verify Password:</h:outputLabel>

        <h:inputSecret id="verify" value="#{register.verify}"

                       required="true"/>

        <h:message for="verify" styleClass="error" />

      </div>

    </s:validateAll

    >

### 33.1.3. フォーマット

#### 33.1.3.1. `<s:decorate>`

詳細

検証に失敗した場合または `required="true"` が設定されている場合、 JSF 入力フィールドを "装飾" します。

属性

- `template` — コンポーネントを装飾するためのfaceletテンプレート

- `enclose` — もし true ならば、インプットフィールドを飾るために使われるテンプレートが "element" 属性を持つ要素によって囲まれる。

- `element` — テンプレートを囲むための要素は、入力フィールドを飾るのに使われます。デフォルトでは、テンプレートはdiv要素で囲むようになっています。

`#{invalid}` と `#{required}` が `s:decorate` の内部で利用可能です; 入力コンポーネントを入力必須として装飾した場合、`#{required}` は `true` と評価されます。また、検証エラーが起こった場合、 `#{invalid}` は `true` と評価されます。

使い方

    <s:decorate template="edit.xhtml">

       <ui:define name="label"

    >Country:</ui:define>

          <h:inputText value="#{location.country}" required="true"/>

       </s:decorate

    >

    <ui:composition xmlns="http://www.w3.org/1999/xhtml"

       xmlns:ui="http://java.sun.com/jsf/facelets"

       xmlns:h="http://java.sun.com/jsf/html"

       xmlns:f="http://java.sun.com/jsf/core"

       xmlns:s="http://jboss.com/products/seam/taglib">

       <div

    >

          <s:label styleClass="#{invalid?'error':''}">

             <ui:insert name="label"/>

             <s:span styleClass="required" rendered="#{required}"

    >*</s:span>

          </s:label>

          <span class="#{invalid?'error':''}">

             <s:validateAll>

                <ui:insert/>

             </s:validateAll>

          </span>

          <s:message styleClass="error"/>

       </div

    >

    </ui:composition

    >

#### 33.1.3.2. `<s:div>`

詳細

HTML `<div>` をレンダリングします。

属性

なし

使い方

    <s:div rendered="#{selectedMember == null}">

       Sorry, but this member does not exist.

    </s:div

    >

#### 33.1.3.3. `<s:span>`

詳細

HTML `<span>` をレンダリングします。

属性

- `title` — span のタイトル

使い方

    <s:span styleClass="required" rendered="#{required}" title="Small tooltip"

    >*</s:span

    >

#### 33.1.3.4. `<s:fragment>`

詳細

レンダリングされないコンポーネントです。その子要素のレンダリングを有効化/無効化するのに便利です。

属性

なし

使い方

    <s:fragment rendered="#{auction.highBidder ne null}">

       Current bid:

    </s:fragment

    >

#### 33.1.3.5. `<s:label>`

詳細

JSF入力フィールドをラベルで "装飾" します。ラベルはHTMLでは `<label>` タグで配置され、最も近いJSF入力コンポーネントと関連づけられます。 よく `<s:decorate>` とともに使用されます。

属性

- `style` — コントロールのスタイル。

- `styleClass` — コントロールのスタイルクラス。

使い方

    <s:label styleClass="label">

      Country:

    </s:label>

    <h:inputText value="#{location.country}" required="true"/>

#### 33.1.3.6. `<s:message>`

詳細

検証エラーのメッセージで JSF 入力フィールドを "装飾" します。

属性

なし

使い方

    <f:facet name="afterInvalidField">

      <s:span>

        &#160;Error:&#160;

        <s:message/>

      </s:span>

    </f:facet

    >

### 33.1.4. Seam Text

#### 33.1.4.1. `<s:validateFormattedText>`

詳細

サブミットされた値が正しいSeam Textであることをチェックします。

属性

なし

#### 33.1.4.2. `<s:formattedText>`

詳細

Seam Text を出力します。Seam Text はブログ、wiki およびリッチテキストを使うその他のアプリケーションにとって便利なリッチテキストマークアップです。使い方の全詳細については Seam Text の章を参照してください。

属性

- `value` — レンダリングするリッチテキストマークアップを指定するEL式

使い方

    <s:formattedText value="#{blog.text}"/>

例

### 33.1.5. Form サポート

#### 33.1.5.1. `<s:token>`

詳細

クロスサイト要求フォージェリ (XSRF) 攻撃に対抗して JSF フォームのポストを安全にするために hidden フォームフィールドへ挿入されるランダムトークンを生成する。このコンポーネントを含むフォームを送信するためにブラウザのクッキーは有効にしておく必要があることに注意してください。

属性

- `requireSession` — セッション ID がフォームシグネチャに含まれて、そのトークンがセッションにバインドされるべきかどうかを示す。この値は Facelets の "build before restore" モデルが有効にされているなら (これが JSF 2.0 のデフォルト) false に設定することができます (デフォルト: false) 。

- `enableCookieNotice` — はクッキーがブラウザ内で有効であることを確認するため JavaScript のチェックがページに挿入されるべきであることを示します。クッキーが有効でなければ、フォームの送信が機能しなかったことをユーザーに注意を喚起します (デフォルト:false)。

- `allowMultiplePosts` — は同じフォームが (ビューが変更されない限り) 同じシグネチャで複数回送信されるかどうかを示します。これはフォームが Ajax 呼び出しをするがそれ自身レンダリングをしないとき、あるいは UTToken コンポーネントで普通必要とされます。好ましい方法としては、UTToken コンポーネントが処理されるところで Ajax呼び出しの際にレンダリングされる UIToken コンポーネントを持つことです (デフォルト: false)。

使い方

    <h:form>

       <s:token enableCookieNotice="true" requireSession="false"/>

       ...

    </h:form

    >

#### 33.1.5.2. `<s:enumItem>`

詳細

enum の値から `SelectItem` を作成します。

属性

- `enumValue` — 列挙値の文字列表現

- `label` — `SelectItem` をレンダリングする際に使用するラベル

使い方

    <h:selectOneRadio id="radioList"

                      layout="lineDirection"

                      value="#{newPayment.paymentFrequency}">

       <s:convertEnum />

       <s:enumItem enumValue="ONCE"         label="Only Once" />

       <s:enumItem enumValue="EVERY_MINUTE" label="Every Minute" />

       <s:enumItem enumValue="HOURLY"       label="Every Hour" />

       <s:enumItem enumValue="DAILY"        label="Every Day" />

       <s:enumItem enumValue="WEEKLY"       label="Every Week" />

    </h:selectOneRadio

    >

#### 33.1.5.3. `<s:selectItems>`

詳細

List、 Set、 DataModel または Array から `List<SelectItem>` を作成します。

属性

- `value` — `List<SelectItem>` に格納されるデータを指定するEL式。

- `var`— 繰り返し中、現在のオブジェクトを保持するローカル変数の名前を定義します。

- `label` — `SelectItem` をレンダリングする際に使用するラベル。 `var` 変数を参照できます。

- `itemValue` — この選択肢が選ばれたときにサーバへ送信する値。この指定はオプションです。デフォルトでは `var` オブジェクトが使用されます。`var` 変数を参照できます。

- `disabled` — true の場合、 `SelectItem` はレンダリングされません。`var` 変数を参照できます。

- `noSelectionLabel` — リストの最初に表示される (オプションの) ラベルを指定します ( `required="true"` も指定されている場合、この値を選択すれば検証エラーになるでしょう) 。

- `hideNoSelectionLabel` — true の場合、値が選択されているときは `noSelectionLabel` は隠されます。

使い方

    <h:selectOneMenu value="#{person.age}"

                     converter="ageConverter">

      <s:selectItems value="#{ages}" var="age" label="#{age}" />

    </h:selectOneMenu

    >

#### 33.1.5.4. `<s:fileUpload>`

詳細

ファイルアップロードコントロールをレンダリングします。 このコントロールはエンコーディングタイプ `multipart/form-data` を使用してフォーム内で使用する必要があります。

    <h:form enctype="multipart/form-data"

    >

マルチパート要求の場合、 Seam Multipart サーブレットフィルタも `web.xml` 内で設定しなければなりません。

    <filter>

      <filter-name

    >Seam Filter</filter-name>

      <filter-class

    >org.jboss.seam.servlet.SeamFilter</filter-class>

    </filter>

    <filter-mapping>

      <filter-name

    >Seam Filter</filter-name>

      <url-pattern

    >/*</url-pattern>

    </filter-mapping

    >

設定

components.xml では、 次のようなマルチパート要求用の設定オプションが設定できます。

- `createTempFiles` — true の場合、アップロードされたファイルはメモリではなく一時ファイルに保存されます。

- `maxRequestSize` — ファイルアップロード要求の最大サイズです。単位はバイトです。

例:

    <component class="org.jboss.seam.web.MultipartFilter">

      <property name="createTempFiles"

    >true</property>

      <property name="maxRequestSize"

    >1000000</property>

    </component

    >

属性

- `data` — この値バインディングはバイナリのファイルデータを受け取ります。受け取るフィールドは `byte[]` または `InputStream` として宣言されている必要があります(必須)。

- `contentType` — この値バインディングはファイルのコンテントタイプを受け取ります (オプション)。

- `fileName` — この値バインディングはファイル名を受け取ります (オプション)。

- `fileSize` — この値バインディングはファイルサイズを受け取ります (オプション)。

- `accept` — 受け入れるコンテントタイプの、カンマ区切りのリストです。ブラウザによってサポートされないかもしれません。 例： `"images/png,images/jpg"`、 `"images/*"`。

- `style` — コントロールのスタイル。

- `styleClass` — コントロールのスタイルクラス。

使い方

    <s:fileUpload id="picture" data="#{register.picture}"

                  accept="image/png"

                  contentType="#{register.pictureContentType}" />

### 33.1.6. その他

#### 33.1.6.1. `<s:cache>`

詳細

JBoss Cache を使用してレンダリングされるページフラグメントの Cache です。 `<s:cache>` は実際には組み込みの `pojoCache` コンポーネントで管理される JBoss Cache のインスタンスを使用するので注意してください。

属性

- `key` — レンダリングされたコンテンツをキャッシュするキーです。値式を使うことが多いです。例えばドキュメントを表示するページフラグメントをキャッシュする場合、 `key="Document-#{document.id}"`のように使います。

- `enabled` — キャッシュを使うべきかどうか決定する値式。

- `region` — 使用する JBoss Cache のノード(ノード毎に異なる有効期限ポリシーを持つことができます)。

使い方

    <s:cache key="entry-#{blogEntry.id}" region="pageFragments">

      <div class="blogEntry">

        <h3

    >#{blogEntry.title}</h3>

        <div>

          <s:formattedText value="#{blogEntry.body}"/>

        </div>

        <p>

          [Posted on&#160;

          <h:outputText value="#{blogEntry.date}">

            <f:convertDateTime timezone="#{blog.timeZone}" locale="#{blog.locale}"

                               type="both"/>

          </h:outputText

    >]

        </p>

      </div>

    </s:cache

    >

#### 33.1.6.2. `<s:resource>`

詳細

ファイルをダウンロードするプロバイダの働きをするタグです。JSF ページと一緒に設定する必要があります。これを制御するため、web.xml は次の用に設定しなければなりません。

設定

    <servlet>

       <servlet-name

    >Document Store Servlet</servlet-name>

       <servlet-class

    >org.jboss.seam.document.DocumentStoreServlet</servlet-class>

    </servlet>

    <servlet-mapping>

       <servlet-name

    >Document Store Servlet</servlet-name>

       <url-pattern

    >/seam/docstore/*</url-pattern>

    </servlet-mapping>

属性

- `data` — ダウンロードされるべきデータです。java.util.File か、InputStream またはバイト配列が設定できます。

- `fileName` — 提供されるファイルのファイル名

- `contentType` — ダウンロードされるファイルの content type

- `disposition` — 使用する disposition 。 デフォルトは inline 。

使い方

このタグを使う方法の例がこれになります。

    <s:resource xmlns="http://www.w3.org/1999/xhtml"

            xmlns:s="http://jboss.com/products/seam/taglib"

            data="#{resources.data}"

            contentType="#{resources.contentType}"

            fileName="#{resources.fileName}" />

`resources` という名前の Bean は、特定のファイルを表す要求パラメータを提供するバッキング Bean です。`s:download` を参照してください。

#### 33.1.6.3. `<s:download>`

詳細

`<s:resource>` への RESTful リンクを作ります。入れ子になった `f:param` がその URL を作ります。

- `src` — ファイルを提供するリソースファイル

属性

    <s:download src="/resources.xhtml">

        <f:param name="fileId" value="#{someBean.downloadableFileId}"/>

    </s:download

    >

これは `http://localhost/resources.seam?fileId=1` のようなものを生成します。

#### 33.1.6.4. `<s:graphicImage>`

詳細

拡張された `<h:graphicImage>` で、Seamコンポーネント内で画像を作成することを許可します。 さらに画像の変換も適用できます。

`<h:graphicImage>` のすべての属性がサポートされている他、 以下もサポートされています。

属性

- `value` — 表示する画像です。パスを表す `String` (クラスパスからロードされます)、`byte[]`、`java.io.File`、`java.io.InputStream` または `java.net.URL` が指定可能です。現在サポートされる画像フォーマットは `image/png`、`image/jpeg` と `image/gif` です。

- `fileName` — 指定しなかった場合、画像は生成されたファイル名を持ちます。ファイルに名前を付けたい場合、ここで指定してください。この名前は一意である必要があります。

変換

イメージに変換を適用するには、 適用する変換を指定するタグをネストさせます。 Seam は現在、 次のような変換をサポートしています。

`<s:transformImageSize>`

  - `width` — 画像の幅を指定します。

  - `height` — 画像の高さを指定します。

  - `maintainRatio` — `true` が指定され、かつ `width` と `height` の 片方 が指定された場合、指定されなかった側をアスペクト比を維持するよう計算し、画像をリサイズします。

  - `factor` — 与えられた係数で画像を拡大縮小します。

`<s:transformImageBlur>`

  - `radius` — 与えられた半径でコンボリューションブラーを実行します。

`<s:transformImageType>`

  - `contentType` — 画像のタイプを `image/jpeg` または `image/png` に変更します。

変換を自作するのは簡単です - `org.jboss.seam.ui.graphicImage.ImageTransform` を実装する `UIComponent` を作成します。 `applyTransform()`メソッド内で `image.getBufferedImage()` を使って元の画像を取得し、`image.setBufferedImage()` で変換した画像をセットします。変換はビューに指定された順序で適用されます。

使い方

    <s:graphicImage rendered="#{auction.image ne null}"

                    value="#{auction.image.data}">

      <s:transformImageSize width="200" maintainRatio="true"/>

    </s:graphicImage

    >

#### 33.1.6.5. `<s:remote>`

詳細

Seam Remoting を使うのに必要な Javascript のスタブを生成します。

属性

- `include` — コンポーネント名 (または完全修飾クラス名)のカンマ区切りのリストです。これらの Seam Remoting の Javascript スタブを生成します。詳しくは 章 25. リモーティング を参照してください。

使い方

    <s:remote include="customerAction,accountAction,com.acme.MyBean"/>

## 33.2. アノテーション

Seamはさらに、SeamコンポーネントをJSFコンバータやバリデータとして使えるようにするアノテーションを提供します:

`@Converter`

      @Name("itemConverter")

      @BypassInterceptors

      @Converter

      public class ItemConverter implements Converter {

         @Transactional

         public Object getAsObject(FacesContext context, UIComponent cmp, String value) {

            EntityManager entityManager = (EntityManager) Component.getInstance("entityManager");

            entityManager.joinTransaction();

            // Do the conversion

         }

         public String getAsString(FacesContext context, UIComponent cmp, Object value) {

            // Do the conversion

         }

      }

      <h:inputText value="#{shop.item}" converter="itemConverter" />

  SeamコンポーネントをJSFコンバータとして登録します。ここで例に挙げたのは、値をそのオブジェクト表現に変換する際に、JTAトランザクション内でJPAエンティティマネージャにアクセスするようなコンバータです。

`@Validator`

      @Name("itemValidator")

      @BypassInterceptors

      @org.jboss.seam.annotations.faces.Validator

      public class ItemValidator implements javax.faces.validator.Validator {

         public void validate(FacesContext context, UIComponent cmp, Object value)

               throws ValidatorException {

            ItemController ItemController = (ItemController) Component.getInstance("itemController");

            boolean valid = itemController.validate(value);

            if (!valid) {

               throw ValidatorException("Invalid value " + value);

            }

         }

      }

      <h:inputText value="#{shop.item}" validator="itemValidator" />

  SeamコンポーネントをJSFバリデータとして登録します。ここで例に挙げたのは、別のSeamコンポーネントをインジェクトし、インジェクトされたコンポーネントが値を検証するようなバリデータです。

- 前のページ第32章 組み込み Seam コンポーネント
- 上に戻る
- ホーム
- 次のページ第34章 JBoss EL