http://d.hatena.ne.jp/shin/20090807/p2 の続き
セットアップ等は前回のを参照してください。
今回はFaceletsのすぐわかる利点をやってみる。あまりにも簡単であきれるかも。
通常JSFではカスタムタグを使ってコンポーネントを作成する。しかし、これではデザイナの作成するHTMLとの剥離が大きく後で修正することになる。これはStrutsやRailsでも同じことだけど。
で、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()}"/>