TeedaからのJSF2

なんかどこかで見たことあるようなタイトルだけど、(゚ε゚)キニシナイ!!


ふとしたきっかけでTeedaを久々に触ったのでJSF 2.0と比較してみる。

内容はTeedaサンプルの足し算プログラムをさらに余計なものを取り除いて単純化したもの。

まずはTeedaから

●テンプレート

<input type="text" id="arg1"  />
 + 
<input type="text" id="arg2" />
 = 
<span id="result"/>
<input type="submit" value="計算" id="doAction" />

●管理対象Bean

public class AddPage {

	private int arg1;

	private int arg2;

	private int result;

	public String doAction() {
		result = arg1 + arg2;
		return null;
	}
	
	//セッターゲッター省略
}

IDによるマッピングWicketと同じ。わかりやすい。ただし、クラス名、プロパティ、アクション名等のマッピングが全自動で、規約を覚える(たとえばこの例だとdoから始まる必要があるなど)のに多少時間がかかるかなぁと思うくらい。あとforeachするときのIDがつらい気がする。


JSF 2.0

●テンプレート

<input type="text" value="#{add.arg1}" jsfc="h:inputText" />
 + 
<input type="text" value="#{add.arg1}" jsfc="h:inputText" />
 = 
<span value="#{add.result}" jsfc="h:outputText"/>
<input type="submit" value="計算" action="#{add.action}" jsfc="h:commandButton" />

●管理対象Bean

@ManagedBean
@RequestScoped
public class Add {

	private int arg1;

	private int arg2;

	private int result;

	public String action() {
		result = arg1 + arg2;
		return null;
	}
	
	//セッターゲッター省略
}


どちらもJSFの設定ファイルはゼロ。ただし、TeedaTeedaを動かすためのSeasar2の設定が必要。JSF2は本当に何も必要としない。Servlet 3.0ならばweb.xmlすら必要としていない。本当に上に挙げたコードだけで動く。

規約でIDと関連付けされるか、テンプレートから明示的に追っていくかの違いだけだと思われる。JSF2のほうはID設定まったく入れていないのがわかる。かわりにvalueでどのクラスのどのプロパティにマッピングするのかを明示する必要がある。jsfc属性はどのコンポーネントとしてみなすかの属性。カスタムタグを使う場合は必要ない。


Ajaxが簡単に対応できるJSF2のほうが楽かなぁとは思う。あとJSF2はDIコンテナ依存していないのもポイントになるかな。


どちらにしろこのサンプルだと違いはあんまりないのがわかるだろうか。