検索と結果のテーブル表示

さて、ヘッダ部のリンクIceUserListをクリックし、図10(左)画面に戻ろう。ここで、検索用のテキストボックスに検索キーワードを入力し、フォーカスを外すと、図10(右)のように検索結果が反映される。

図10 一覧の表示と検索画面

検索用のテキストボックスは、リスト7のようになっている。パーシャルサブミットが有効になっており、テキストボックスからフォーカスを外した段階でリクエストが送信される。検索処理は、前述した通り、SeamアプリケーションフレームワークにおけるQueryオブジェクトにより実行される。

リスト7 userIdの入力テキストボックス(Faceletsページ)

<s:decorate id="userIddecId" template="layout/display.xhtml">
  <ui:define name="label">userId</ui:define>
  <ice:inputText id="listuserIdTextId"
    value="#{iceUserList.iceUser.userId}" partialSubmit="true" />
</s:decorate>

検索結果が表示されるテーブルには、テーブルコンポーネント(ice:dataTable、ice:column)を用いている。カラムのヘッダにはJBoss Seamのリンク(s:link)コンポーネントを用いており、テーブルの表示順を変更することが可能である。

CRUDと入力検証

ユーザ一覧のテーブル中にあるリンクSelectをクリックすると、図11のようなユーザ情報の編集画面に遷移する。既存ユーザの編集機能の他にも、新規ユーザの登録、既存ユーザの削除の機能が存在する。これらのCRUD機能は、前述したHomeオブジェクトにより実現されている。

図11 既存ユーザの編集画面

この画面においても、テキストボックスのパーシャルサブミットが有効になっており、テキストボックスからフォーカスを外すたびに、入力検証が実行される。ここで、入力のすべてのテキストボックスのタグは、JBoss Seamの入力検証コンポーネント(s:validateAll)内にある。これにより、リスト2で指定したアノテーションに従って、Hibernate Validatorによる入力検証が実行される。入力検証がエラーになった場合の表示については、リスト7のs:decorateにおいて、テンプレートlayout/display.xhtmlを適用することで実現している。

これまで見てきたように、画面の構築は、Faceletsページに、ICEfacesにて用意されたカスタムタグを貼り付けているだけである。ビジネスロジックは(その設定も含め)、JBoss Seamの機能を用いており、非常に少ないソースコードにて構築されている。このように、ICEfacesが用意しているAjax対応のコンポーネントを用いつつ、ビジネスロジックをSeamコンポーネントに記述することで、互いの長所を生かしながらICEfaces×JBoss Seamアプリケーションが構築可能なのである。