NetBeans6.0のVisual Web JSFでSpring2.5を使ってみる その5

今回から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ですが、日本語が扱えない場面は非常に多いです。特にEJB3JPAで日本語を扱うことができないGlassfish V2やマルチリンガル対応のSun Java System Application Server9.1は日本人は扱うのはやめたほうがいいでしょう。


話がそれました。上で作成したクラスをJSFから呼んでみる。まずはビジュアルエディタでテキストフィールドコンポーネントを選択してください。そのrequiredMessageプロパティに以下のように設定する。

設定したら実行してみましょう。そして何も入力せずにボタンを押すとSpringで設定されたコンポーネントのget必須メッセージが呼ばれているのがわかると思う。

本来JSFで管理されたBeanのみELで設定できるのだが、設定をしていない通常のクラスが扱えている。もっとも、その管理されたBeanを登録するのはVisualWebJSFではカンタンなのだが、通常はxmlで設定してあげなくてはいけなく、ツールのサポートがなければ面倒なもののひとつだ。

次回はhelloというロジックをJavaのコードから呼び出せるようにする。