今回からSpringを使ってみようと思います。設定は前回ので全てです。すでにxmlを今後一切いじらずにコンポーネントを登録していけるようにしてあります。
まず、前回設定したパスにフォルダを作ります。
これが前回設定した部分であるが、このパッケージに特定の表記をしたクラスがSpringで認識されることになる。
そしてそこにTestMessageというJavaのクラスを作ります。
内容は以下のとおりです。
package springtest.beans; import org.springframework.stereotype.Component; @Component("MessageService") public class TestMessage { public String hello(String name){ return "Springからはろー " + name; } public String get必須メッセージ(){ return "必須入力なんだぜ?"; } }
内容を少し説明しましょう。一番上にある
@Component("MessageService")
はSpringに登録するコンポーネント名を表します。クラスとしてはTestMessageという名前だが、Springの扱う名前としてMessageServiceという名前なのです。
そしてメソッドが2つあります。
上のhelloメソッドは文字列を受け取って加工して返します。これはJavaのコード側で呼び出そうという試み。現状返される「はろー」+名前をもじったものだ。Spring側で用意されたコンポーネントで加工されたことをわかりやすくしたというところ。
下のメソッドはgetがついているのでプロパティアクセスされるのがわかると思う。プロパティ名を日本語にしているのはわかりやすさもあるが、Spring+JSFがどこまで日本語が扱えるかを試したものだ。戻り値を見ればわかるとおり、必須入力時のメッセージを返すようにしている。
余談ですが、本当はコンポーネント名も日本語を入れてみたのですが、ELのJavaコード側からの解釈のほうではうまく認識できなかったので泣く泣く7bitに収めました。JSFのメソッドバインディングからのほうだけは問題ないようです。このようにコンパイルされればすべてUnicodeで全て統一されているはずのJavaですが、日本語が扱えない場面は非常に多いです。特にEJB3+JPAで日本語を扱うことができないGlassfish V2やマルチリンガル対応のSun Java System Application Server9.1は日本人は扱うのはやめたほうがいいでしょう。
話がそれました。上で作成したクラスをJSFから呼んでみる。まずはビジュアルエディタでテキストフィールドコンポーネントを選択してください。そのrequiredMessageプロパティに以下のように設定する。
設定したら実行してみましょう。そして何も入力せずにボタンを押すとSpringで設定されたコンポーネントのget必須メッセージが呼ばれているのがわかると思う。
本来JSFで管理されたBeanのみELで設定できるのだが、設定をしていない通常のクラスが扱えている。もっとも、その管理されたBeanを登録するのはVisualWebJSFではカンタンなのだが、通常はxmlで設定してあげなくてはいけなく、ツールのサポートがなければ面倒なもののひとつだ。
次回はhelloというロジックをJavaのコードから呼び出せるようにする。