NetBeans 6.8開発版で試すJSF 2.0

M1なんでまだまだ機能は追加されるはずです。今の状態でもかなり追加されています。かなりの大型アップデートです。おそらくNetBeans 5.5並に重要なバージョンだと思われます。それだけに6.8というマイナーバージョンアップに見えるのはどうにかならなかったのかと悔やまれます。

Javascriptのライブラリプラグインも6.8のほうにはあるのを確認しました。6.7.1ではいまだ有効にされていないのに。


今回の目玉はなんと言ってもJava EE 6の対応でしょう。Java EE 5の対応においてかなり早くから手厚いサポートを行ったNetBeans 5.5を思い出します。ある意味これがSDKというかリファレンス的な開発環境となっていましたね。

というわけで今回はZIP版を落として動かしてみました。まずはWebアプリのプロジェクトを作成してみます。


Webプロジェクトの新規作成ウィザードを進めると、実行するサーバーの設定が出てきます。ZIP版はインストーラ版とは違い最初からアプリケーションサーバーが登録されているわけではないので、インストールされているサーバーのパスを選んであげる必要があります。Glassfish V3 previewがあったのでそれを選びました。

Java EE 6 web」というのはwebプロファイル版ということでしょうか。いままではJava EE 5までしか選択できませんでしたからここが大きな違いです。


ウィザードを続けるとフレームワークのところにJSF 2.0がありました。1.2も選択可能です。早速選んでみます。


タブを切り替えるとFaceletsが選択項目にあります。そしてこちらがデフォルトになっています。

sunとしてはFaceletsを推進していきたいということでしょうか。FaceltesはデザインをHTMLで書いてもらって、ロジックを後から差し込んでいくという開発が出来るのでこれはいいですね。


これがウィザード終了直後のファイルです。

web.xmlのバージョンも3.0になっています。2.5までには見慣れない項目も追加されているようです。faces-config.xmlももちろん、2.0となっています。今まで試すのにJavaEE 5でプロジェクトを作成し、手動でいじっていて無理やり動かしていたのに比べるとさすがに楽チンですね。


ではいよいよ自動生成されたコードの中身を見ていきます。

●forwardToJSF.jsp

<%@page pageEncoding="UTF-8"%>

<jsp:forward page="faces/template-client.xhtml"/>

スタートページになっていますが、JSFのページへフォワードするというつくりになっているようです。Spring MVCとかでもよくやる手ですね。


●template.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">
    <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>
        <h1>
            <ui:insert name="title">Default Title</ui:insert>
        </h1>
        <p>
            <ui:insert name="body">Default Body</ui:insert>
        </p>
    </body>
    
</html>

テンプレートファイルです。いわゆるこれがデザイナに作成してもらう部分です。「」というのが外部から埋め込んでもらう部分です。


右クリックしてViewというメニューを選択します。ブラウザで直接ファイルを開いてみます。


このように表示されます。uiタグを無視してレンダリングしているのがわかるでしょうか。


では続いてJSFが解釈するファイルです。最初のフォワード先のファイルはこちらになっています。

●template-client.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">
    <body>
        
        This text above will not be displayed.
        
        <ui:composition template="/template.xhtml">
            
            This text will not be displayed.
            
            <ui:define name="title">
                Facelets
            </ui:define>
            
            This text will also not be displayed.
            
            <ui:define name="body">
                Hello from the Facelets client template!
            </ui:define>
            
            This text will not be displayed.
            
        </ui:composition>
        
        This text below will also not be displayed.
        
    </body>
</html>

」というのが埋め込む先の情報です。それ以外の場所にテキストがたくさんありますが、これらは無視されます。


ではこのまま実行してみます。6.8開発版でも6.7と同様にGlassfish V3との連携がイマイチうまく動いていないのですが、ごまかして進めます。

実行結果。

実際に出力されるソースは以下のようになります。

<?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">
    <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>
        <h1>

                Facelets
        </h1>
        <p>
                Hello from the Facelets client template!
        </p>
    </body>
    
</html>

文字が変わりましたね。先ほどのテンプレートファイルを直接表示したのと比べてください。埋め込みが行われているのがわかるでしょうか。ここにJSFのタグを書いていくことによってHTMLとロジックの分離をきれいに行うことが出来るのです。これがfaceletsの最大の特徴です。


VisualWebに力を入れていない理由はfaceletsの標準サポートがあるのかな、と思いました。デザインはDreamWeaver等でやれよと。ならばデザインではなく今回のtemplate-client.xhtmlのようなものを簡単に作れる仕組みがほしいところです。


やっとJava EE 6を試せる環境が整ってきたようです。