先日行った「HTML5とか勉強会 ビギナーズ」で学んだことの一部を、せっかくなのでJava EE 7のJSF2.2で試してみました。ほんの一部ですが…(^^;
Java EE 7のHTML5に関しては日本語でも既に
辺りで出ていますので、詳細はそちらを(^^;
上記リンクの情報ではいずれ「jsf:~」を使った書き方となっていますが、今回の例では以下のサイトのように普通に書いてみました。
http://www.infoq.com/jp/news/2013/07/jsf22-html5
環境はNetBeans7.3.1でGlassFish4.0を使っています。
HTML5のタグで試してみたのは以下5つ。各々「HTMLクイックリファレンス」のタグ解説ページにリンクはってます。
実行画面はこんな感じ。
テキストにガイド情報つけたり、フォーカス制御したり、幅を持つレンジや値を刻むステップなど。簡単に表現できるようになってる!メール形式もバリデーションがついてて、Chromeでは以下のような感じにエラーが表示されました。
ちなみにFirefoxだと
と色が変わりました。この辺の細かい挙動はブラウザごとに違う…のかな(^^;
上記のビューはJSFで以下のように定義したものです。
<?xml version='1.0' encoding='UTF-8' ?>
<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>
冒頭の宣言は
にしておくほうが良いと思いますが、上記のビュー定義(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' ?>
<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>
実行すると
ウォーターマークやフォーカスというコンポーネントがあるので、それほどの手間はないのですが、それでもHTML5に比べると宣言も増えるし記述量は増えます。
ここからサイズを調整するCSSとかも必要なので、結構手間…。
もしPrimeFaces使わなかったら、フォーカス制御をJavaScriptで書いたり、jQuery使ったり、といった所ですかね…。
こうしてみると、HTML5で楽できる部分が色々ありそうだなぁ、と。
はやくJava EE 7が安定化して、JSF2.2使えるといいなぁ。
でも業務系のシステムだとIE7対応が必須…とかでHTML5どころではない気も…(-_-;