パラメータ受け渡し その2
JSFのf:paramを使うとパラメータを受け渡すことができます。これはh:commandButtonタグやh:commandLinkタグの内側で使うことができます。
渡す側のJSF
この例は、メートル単位で長さ数字を入力するinputTextをひとつ用意し、それを単位換算するためのボタンを2つ用意します。1つはインチ換算、もうひとつはフィート換算です。
それぞれのボタンの中にはf:pramタグが含まれていてinchボタンが押されたのか、feetボタンが押されたのかをパラメータで送るようにします。どちらのボタンが押されてもparam1Beanビーンのaction()メソッドが実行されます。
<h:form>
<h2>単位換算</h2>
長さ
<h:inputText value=”#{param1Bean.inputvalue}” styleClass=”in”/>メートル
<h:commandButton value=”inch” action=”#{param1Bean.action()}”>
<f:param name=”unit” value=”inch”/>
</h:commandButton>
<h:commandButton value=”feet” action=”#{param1Bean.action()}”>
<f:param name=”unit” value=”feet”/>
</h:commandButton>
</h:form>
マネージドビーン
param1Beanのaction()メソッドはどうなっているのでしょうか。赤い文字の部分でf:paramタグの値を読み取るようにしています。前の回でinitParamを扱ったときと同様にFacesContextを取得してgetRequestParameterMap()でリクエストパラメータを全部取得して、そこからunitという名前のパラメータを取り出します。
そのあと、それがinchかfeetなのかで換算する数値を変えています。換算後の結果はconvertedValueにセットするようにsetConvertedValue()メソッドをコールします。
public class Param1Bean {
double inputvalue;
double convertedValue;
public Param1Bean() {
}
public String action(){
FacesContext fc=FacesContext.getCurrentInstance();
Map<String,String> params=fc.getExternalContext().getRequestParameterMap();
String unit=params.get(“unit”);
if(unit.equals(“inch”)){
setConvertedValue(inputvalue*39.37d);
}else if(unit.equals(“feet”)){
setConvertedValue(inputvalue*3.2808d);
}
return “converted”;
}
・・・・・
受け取る側のJSF
入力値、換算値、単位の3つを表示しています。最初の2つの値はマネージドビーンから取得していますが、3つ目の単位は暗黙オブジェクトのparamを使っています。paramの中のunitという名前のパラメータを取得します。
<h:body>
#{param1Bean.inputvalue}メートルは#{param1Bean.convertedValue}#{param.unit}です。
</h:body>
実行すると入力画面はこんな感じです。
インチ換算だとつぎのようになります。
フィート換算ボタンを押すと
きちんと表示できます。


JSF2.2のすべてをまとめたkindle電子書籍 「JavaServer Faces2.2 入門」もぜひご覧ください。パソコン、iPhone、Androidどんな端末用にもamazonが無料のKindle電子書籍リーダーを用意しています。それをつかってKindle本を手軽にお楽しみください。あなたが今お使いの端末用Kidle電子書籍リーダーのご案内