読者です 読者をやめる 読者になる 読者になる

Challenge Java EE !

Java EEを中心に趣味や仕事における開発メモを書いています。

JSF2.2でHTML5のタグを少し試してみる その1

HTML5 Java EE 7 JSF PrimeFaces

先日行った「HTML5とか勉強会 ビギナーズ」で学んだことの一部を、せっかくなのでJava EE 7のJSF2.2で試してみました。ほんの一部ですが…(^^;

Java EE 7のHTML5に関しては日本語でも既に


辺りで出ていますので、詳細はそちらを(^^;

JSF2.2でHTML5

上記リンクの情報ではいずれ「jsf:~」を使った書き方となっていますが、今回の例では以下のサイトのように普通に書いてみました。
http://www.infoq.com/jp/news/2013/07/jsf22-html5

環境はNetBeans7.3.1でGlassFish4.0を使っています。

HTML5のタグで試してみたのは以下5つ。各々「HTMLクイックリファレンス」のタグ解説ページにリンクはってます。

実行画面はこんな感じ。

f:id:kikutaro777:20130727152034j:plain

テキストにガイド情報つけたり、フォーカス制御したり、幅を持つレンジや値を刻むステップなど。簡単に表現できるようになってる!メール形式もバリデーションがついてて、Chromeでは以下のような感じにエラーが表示されました。

f:id:kikutaro777:20130727153031j:plain

ちなみにFirefoxだと

f:id:kikutaro777:20130727153054j:plain

と色が変わりました。この辺の細かい挙動はブラウザごとに違う…のかな(^^;

上記のビューはJSFで以下のように定義したものです。

<?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:h="http://xmlns.jcp.org/jsf/html"
      xmlns:p="http://xmlns.jcp.org/jsf/passthrough">
    <h:head>
        <title>JSF HTML5</title>
    </h:head>
    <h:body>
        <h:form>
            <h:panelGrid columns="2">
                <h:outputLabel value="placeholder" />
                <h:inputText p:placeholder="hello" />
                
                <h:outputLabel value="autofocus" />
                <h:inputText p:autofocus="true" />
                
                <h:outputLabel value="email" />
                <h:inputText p:type="email" />
                
                <h:outputLabel value="range" />
                <h:inputText p:type="range" />
                
                <h:outputLabel value="step" />
                <h:inputText p:type="number" p:step="1"/>
            </h:panelGrid>

            <h:commandButton value="ボタン" />
        </h:form>
    </h:body>
</html>

冒頭の宣言は

<!DOCTYPE html>

にしておくほうが良いと思いますが、上記のビュー定義(xhtml)でも実行したHTMLをみると宣言が上記HTML5の宣言に書き換わっていました。ほー。

JSF2.1でやるには?

以下ZDNETの記事にもあるように、Java EE 7はリリースされましたが、実際に使うにはまだ少し様子をみたほうがよいようです。
「Java EE 7」の本格導入に向け、今は新機能への理解を深める時

じゃあ現時点のJava EE 6、JSF2.1で同じことをやろうとすると…どうなるのか(^^;
とりあえず、リッチコンポのPrimeFacesを使うと以下のような感じかなと。

実際書いてみました。

<?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:h="http://xmlns.jcp.org/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>JSF HTML5</title>
    </h:head>
    <h:body>
        <h:form id="frm">
            <h:panelGrid columns="2">
                <h:outputLabel value="placeholder" />
                <h:inputText id="txtWater" />
                
                <h:outputLabel value="autofocus" />
                <h:inputText id="txtFocus" />
                
                <h:outputLabel value="email" />
                <h:inputText p:type="email" />
                
                <h:outputLabel value="range" />
                <p:slider for=":frm:txtSlider" />
                
                <h:outputLabel value="step" />
                <p:spinner stepFactor="1" />
            </h:panelGrid>
            
            <p:watermark value="hello" for=":frm:txtWater" />
            
            <p:focus for=":frm:txtFocus" />
            
            <h:inputHidden id="txtSlider" />

            <h:commandButton value="ボタン" />
        </h:form>
    </h:body>
</html>

実行すると

f:id:kikutaro777:20130727153619j:plain

ウォーターマークやフォーカスというコンポーネントがあるので、それほどの手間はないのですが、それでもHTML5に比べると宣言も増えるし記述量は増えます。
ここからサイズを調整するCSSとかも必要なので、結構手間…。

もしPrimeFaces使わなかったら、フォーカス制御をJavaScriptで書いたり、jQuery使ったり、といった所ですかね…。

こうしてみると、HTML5で楽できる部分が色々ありそうだなぁ、と。
はやくJava EE 7が安定化して、JSF2.2使えるといいなぁ。

でも業務系のシステムだとIE7対応が必須…とかでHTML5どころではない気も…(-_-;

にほんブログ村 IT技術ブログへ
にほんブログ村
にほんブログ村 IT技術ブログ Javaへ
にほんブログ村