コンバーターとは?
プログラムの処理内容によっては、送信される値が特定のものでなければならないことがあります。こうしたとき、正しい内容の値を送信するようにするための仕組みがJSFにはあります。1つは「コンバーター」と呼ばれるものです。
コンバーターは、「値を変換する仕組み」です。例えば、整数の値が必要な場合があったとしましょう。このとき、整数の値に変換するコンバーターを使うと、送られた値は自動的に整数として取り出せるようになります。のみならず、整数以外の値が送られた場合には、再度フォームが表示され、処理は実行されなくなります。正しい値が送られない限り、プログラムは動かないのです。
コンバーターを使うには、JSFの設定ファイルに登録をしておく必要があります。実際にやってみましょう。まず、faces-config.xmlを開き、<faces-config>タグ内に以下のようなタグを追記します。
<converter>
<converter-id>int_conv</converter-id>
<converter-class>javax.faces.convert.IntegerConverter</converter-class>
</converter>
コンバーターは、<converter>タグを使って登録します。;<converter-id>タグでコンバーターのID(要するに、名前ですね)を指定し、使用するコンバーターのクラスを<converter-class>で指定します。これにより、指定されたコンバータークラスが、登録IDで呼び出せるようになります。
ここで登録したIntegerConverterというクラスは、整数に変換するコンバーターです。JSFには、標準でいくつかのコンバーターが付属しており、これもその一つです。では、コンバーターを使ってみましょう。まず、入力フィールドにコンバーターを設定する形でフォームを用意します。
<f:view>
<h:outputText value="JSF Page 1" id="text0"
style="color: #0000AA; font-size: 18px; font-weight: bold" />
<br /><br />
<h:outputText value="これは、JSFによる表示です。" id="text1"
binding="#{page1Bean.text1}" escape="true" />
<h:form>
<h:inputText binding="#{page1Bean.field1}" converter="int_conv" />
<h:commandButton value="送信" action="#{page1Bean.button1_action}" />
</h:form>
</f:view>
ここでは、<h:inputText>タグの属性として、converter="int_conv"というものが書かれていますね。このようにコンバーターは、converter属性を使い、使用するコンバーターのIDを設定して利用します。
では、送信されたプログラムの処理を管理Beanに用意しましょう。ここではサンプルとして、送られてきた数字を元に、1からその数字までの合計を計算し表示するようにしてみます。
public String button1_action(){
int n = (Integer)field1.getValue();
int total = 0;
for (int i = 1;i <= n;i++) total += i;
text1.setValue("合計:" + total);
return null;
}
整数を書いて送信すると合計が表示される。整数以外の値だとプログラムは動かない。 |
プログラムを見てみるとわかりますが、(Integer)field1.getValue()というようにIntegerとして値を取り出していますね。コンバーターを指定すると、このようにそのコンバーターで得られる種類の値として取り出せるようになります。逆に、(String)して取り出そうとするとエラーになるので注意が必要です。