EclipseでICEfacesの開発


ICEfacesの環境をEclipseで作ろうと思ったが、面倒なので(というかEclipseの動きが良く分かっていない)、NetBeansMaven形式にフレームワークを追加でICEfacesを適用したものを作成しておき、Eclipseで開いてみた。

とりあえず真っ先に所感等

結果、問題はないようだ。

注意するのはNetBeansMavenJavaEE 5プロジェクトを作るというのを意識しないといけないくらいかな。デフォルトですぐにアクセスできるWebプロジェクトのテンプレートはJ2EE 1.3のものなので要注意。つーか、これまずくね?せめてJ2EE 1.4くらいだといいと思うけど。あとはソースがデフォルトだとプラットフォームエンコーディングになってるはずなのでこれをUTF-8に変更すること。

ただ、JSFが認識できていないようで、configやJSP等を開いてもなんの補完もできない。オールインワンのEclipse3.4を使っているのだが、入っていないのかな?と思ったら入っていた。設定されていないだけだった。

Webアプリを作るときの環境の構築にしてもだが、プラグインとして入っているのなら最初からある程度のセットアップは完了した状態が望ましいかなぁと思ってしまった。NetBeansプラグインの場合プラグインのインストール=環境構築完了みたいなものだから、このへんは思いっきり方針の違いを感じる。

そのセットアップをしたら、JSP上の管理ビーンとプロパティまでは補完はできた。ただし、ナビゲーションルールのところはどうも動いていないようだったし、アクションメソッドの補完がきいていないみたい。プロパティのみの補完ってのも微妙。JSF Toolsプラグインって5年位前のSun Java Studio Creator 1にすらおいついてないやん…。

それでも、まったくないよりははるかにましなのでこれで我慢する。ICEfacesJSFの開発環境でフルのAJAX環境を用意したのが良く分かる。一から開発環境も用意なんてしていたら、本体以外のプラグインの開発に時間をとられてしまうというデメリットがある。標準APIはどのIDEでもサポートされているというのをうまく利用したということだ。


Mavenのローカルのリポジトリはpomファイルいらないのね。しらんかった。

実際にEclipse側からコードの作成

んで、実際にデフォルトで出来上がっているwelcomJSF.jspの修正からしてみよう。名前から分かるようにIDE側はJSFだと思わせておけばよい。

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<%@taglib prefix="ice" uri="http://www.icesoft.com/icefaces/component"%>
<f:view>
    <html>
        <head>
            <title>JSP Page をいくりぷすで</title>
            <ice:outputStyle href="./xmlhttp/css/xp/xp.css"/>
        </head>
        <body>
            <ice:form>
                <ice:outputText value="#{welcome.message}" />
                <br>
                <ice:inputText value="#{welcome.inputText}"/>
                <ice:commandButton value="めっせーじをかえるぜ" action="#{welcome.action}"/>
            </ice:form>
        </body>
    </html>
</f:view>

見て分かるとおり、JSFの標準APIの部分をさしかえただけだ。標準APIとまったく同じ動きのコンポーネントが用意されているので「」という部分を「」に書き換えただけ。違いは「:」より前の文字列だけだ。

んで、faces-config。

<?xml version='1.0' encoding='UTF-8'?>

<faces-config version="1.2"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">

  <managed-bean>
    <managed-bean-name>welcome</managed-bean-name>
    <managed-bean-class>Welcome</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
  </managed-bean>
</faces-config>

Welcomというクラスをwelcomという名前でJSPから触れるということだけ。ちなみにJSF 2.0ではこの設定ファイルまったく書かなくて良くなる予定。ICEfacesJSF 2.0に対応させる予定なのでますます楽になるだろう。

続いてWelcomクラスを作成。

public class Welcome {
  private String msg = "いくりぷすから愛をこめて";

  public String getMessage(){
    return "ICEfaces へようこそ!< "+msg+">";
  }

  public void setInputText(String msg) {
    this.msg = msg;
  }
  public String getInputText() {
    return msg;
  }

  public String action(){
    return null;
  }
}

JSPと一緒に見ると良い。出力のみのメッセージ(outputTextコンポーネント)はゲッターだけでよいのに対して、入力項目(inputTextコンポーネント)はセッターもある。また、「action="#{welcome.action}"」で設定した部分がこのボタンを押したらactionメソッドを呼ぶということ。戻り値String型にしておけばよい。nullを返すのは画面遷移がないということをあらわす。


まぁJSFとの違いはないよね。実際JSPのタグライブラリ部分をさしかえるだけでただのJSFになる。

実行

初期表示。


テキストボックスに文字を入力してボタンを押す。

ボタンにカーソルがあたったままだということから分かるとおり、画面遷移していない。このコードでAJAXをフルに使ったWebアプリケーションが作成できたというわけだ。変更箇所を自動的に判断してその差分だけ全自動でレンダリングする。


例えばこれと同様の動きをするアプリを作る場合、Strutsなど他のフレームワークではどれだけの作業量がまっているかな?考えてみて欲しい。


AJAX WorldでBest Overall Enterprise RIA Product に選ばれただけのことはある。

Ajax全開ということでpushももちろん出来る。ブラウザ開きっぱなしでオンラインショッピングの在庫がどんどん減っていくとか、オークションでどんどん値段が上がっていくとかそういうのも可能だ。