JavaEE 7 JSF 2.2のすげーいいところ

まずはJSF2.2のすげーいいところを軽く書く。簡単で効果が大きいもの。

解説用ということで前提となる知識を減らすためにCDIもなにも使わない。AJAXもなにもつかわない。

マネージドビーン

package jsf;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.ViewScoped;

@ManagedBean
@ViewScoped
public class Hoge {
    String text = "初期値";

    public String action1(){
        text = "action1";
        return null;
    }
    public String action2(){
        text = "action2";
        return null;
    }

    public String getText() {
        return text;
    }
    
}

このコードから画面に登場するものは以下のものであることが予測できると思う。

  • 表示用のゲッターのみのtextプロパティ
  • 2つのアクションボタン

テンプレート

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:jsf="http://xmlns.jcp.org/jsf">
    <head jsf:id="head">
        <title>JSF 2.2ですね</title>
    </head>
    <body jsf:id="body">
        <form jsf:id="form">
            #{hoge.text}
            <hr/>
            <input type="submit" value="アクション1" jsf:action="#{hoge.action1}" />
            <input type="submit" value="アクション2" jsf:action="#{hoge.action2}" />
        </form>
    </body>
</html>

はい、普通のHTMLですね。「jsf:なんちゃら」と書くとそこはJSFコンポーネントとして認識されるようになります。jsfcを利用していた時はコンポーネント名をいれるためすべてきっちり把握する必要があったのに対してこれは非常にわかりやすい。とりあえず「jsf:id」をいれといてくれればいいため、デザイナに任せることも可能になった。

実行結果

開いた時。
https://s3-ap-northeast-1.amazonaws.com/shinsan/diary/2013/0617-01.png


それぞれボタンを押したとき
https://s3-ap-northeast-1.amazonaws.com/shinsan/diary/2013/0617-02.png
https://s3-ap-northeast-1.amazonaws.com/shinsan/diary/2013/0617-03.png

JSF 1.1とかからさわってるとほんと楽になりましたね。設定ファイルはいらないし、本当にこの2つのファイルとこのコードだけでこの動き。テンプレートもそのまま。


最大のポイントはアクションベースのテンプレートのままコンポーネントベースでの開発ができるということ。

場合によっては一周まわってコンポーネントバインディングしてガリガリやれるようなの作っても面白いのかもしれない(まぁそこまではやりませんけど)。