超簡単になったJSF 2.0をさらに試す

http://d.hatena.ne.jp/shin/20090807/p2 の続き

セットアップ等は前回のを参照してください。

今回はFaceletsのすぐわかる利点をやってみる。あまりにも簡単であきれるかも。


通常JSFではカスタムタグを使ってコンポーネントを作成する。しかし、これではデザイナの作成するHTMLとの剥離が大きく後で修正することになる。これはStrutsRailsでも同じことだけど。


で、JSF 2.0。前回やったテンプレートを分離することでだいぶ改善されるのだが、フォームオブジェクトはそうそう簡単にはいかない。

今回もソース見てもらったほうが早いので先に載せる。今回はテンプレートとの分離はしていない。xhtmlひとつだけ。

<?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:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html">
 <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>Facelets - Template Example</title>
        <link href="./css/default.css" rel="stylesheet" type="text/css" />
    </head>

    <body>
        <div>
            <form jsfc="h:form">
                ${HogeBean.text}
                <input jsfc="h:commandButton" value="おせ" action="#{HogeBean.action()}"/>
            </form>
        </div>
    </body>
</html>


javaソース

package managed;

public class HogeBean {

    String text = "おしてくだされ";

    public String getText() {
        return text;
    }

    public String action(){
        text = "おしたよー";
        return null;
    }

}

これだけ。ポイントはタグの属性にjsfcをつけること。そしてそこにJSFコンポーネント名を指定すればよい。

実行してみる。


ボタンを押してみた。

ふむ。


つまり

<input jsfc="h:commandButton" value="おせ" action="#{HogeBean.action()}"/>

上と下は同一。

<h:commandButton value="おせ" action="#{HogeBean.action()}"/>

前回のテンプレート分離とあわせてここまで標準APIJava EE 6)で可能になったというわけだ。