ICEfaces 2.0 Alpha 2

久しぶりにICEfacesを触ってみました。というのも、JSFが2.0になってからなかなかICEfacesがJSF2.0で正常に動作しなかった上に、そもそもICEfacesを利用するメリットが薄れてきて遠ざかることに。ただ、やっぱりICEfacesコンポーネントは秀逸であるため利用したい、とは常々考えていたところ、Alpha2のリリースがやってきました。

Mavenにも対応したということなので、pom.xmlに以下ICEfacesリポジトリの場所を追記。JBossリポジトリは、後述するdependencyを追加すると依存ライブラリとして参照されているjsf-api-2.0.2.FCS.jarとjsf-impl-2.0.2.FCS.jarを取り込むために必要となります。

<repository>
    <id>org.icefaces</id>
    <name>Repository hosting the icefaces artifacts</name>
    <url>http://anonsvn.icefaces.org/repo/maven2/snapshots/</url>
</repository>
<repository>
    <id>JBOSS</id>
    <name>JBoss Repository</name>
    <url>http://repository.jboss.org/maven2/</url>
</repository>

あとは、以下のdependencyを追加すればOK。

<dependency>
    <groupId>org.icefaces</groupId>
    <artifactId>icefaces-comps-compat</artifactId>
    <version>2.0-A2</version>
    <scope>compile</scope>
</dependency>

Mavenなので依存ライブラリも自動的に取り込まれます。取り込まれたライブラリは以下のようになりました。結構いろいろなライブラリが必要なようです。

  • icefaces-com-ps-compat-2.0-A2.jar
  • icefaces-compat-2.0-A2.jar
  • icefaces-2.0-A2.jar
  • jsf-api-2.0.2.FCS.jar
  • jsf-impl-2.0.2.FCS.jar
  • jstl-1.1.2.jar
  • servlet-api-2.3.jar
  • commons-beanutils-1.8.0.jar
  • commons-collections-3.2.jar
  • commons-digester-1.8.jar
  • commons-fileupload-1.2.1.jar
  • commons-logging-1.1.jar

次にweb.xmlです。ICEfaces1.8の頃までは結構色々と設定しなければならなかったと記憶しているのですが、2.0では下記があれば良いようです。

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>

もしICEfacesで用意しているcssなどを利用したい場合は、さらに下記を追記する必要があります。

<servlet>
    <servlet-name>Resource Servlet</servlet-name>
    <servlet-class>com.icesoft.faces.webapp.ResourceServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Resource Servlet</servlet-name>
    <url-pattern>/xmlhttp/*</url-pattern>
</servlet-mapping>

ICEfacescssは下記のコードで参照することが可能です。

<ice:outputStyle href="/xmlhttp/css/rime/rime.css"/>

ICEfacesの設定はこれだけで良いのですが、実際にxhtmlを実装してみて気がついたこと。FacesMessageを利用してエラーメッセージを表示しているのですが、bodyタグをice:outputBodyにしておかないとf:messagesタグにエラーメッセージが表示されないようです。
例:
Javaソースコード中で下記のようにエラーメッセージを設定している場合

FacesContext ctx = FacesContext.getCurrentInstance();
ctx.addMessage(null, new FacesMessage("エラーです。")));
  • h:body -> 表示されない
  • ice:outputBody -> 表示される

あとは、ICEfacesを利用した場合にf:ajaxタグがうまく動作してないように感じられるぐらい。今のところ、f:ajaxタグは部分再描画にしか利用していないので、非同期で画面を再描画してくれるICEfacesにすべてをお任せする形で良いのかもしれません。