JSF2.2入門 第7回バリデーション


kanban7

katatsumuriバリデーション

バリデーションとはユーザーからの入力値をチェックすることです。入力値は間違えることがよくあるのでそのまま後の処理に入ってしまうとエラーが発生しますのでチェックは重要です。

サーブレットだけで組む場合には、エラーチェックを自分で作らなければなりませんがJSFには組み込まれたものがありますので便利です。

leaf必須入力

h:inputTextタグなど一連の入力タグにはrequiredプロパティが用意されていて、これをtrueにすると必須入力要素となります。もし入力されないとマネージドビーンに値はセットされませんし、次のページにも進みません。

ラジオボタンなら次のようになります。

<h:selectOneRadio value=”#{answerBean.gender}” required=”true”>
<f:selectItem itemValue=”男性” itemLabel=”男性”/>
<f:selectItem itemValue=”女性” itemLabel=”女性”/>
</h:selectOneRadio>

ラジオボタンはデフォルトでどっちか初期選択しておかないと未入力になりやすい要素です。

leaf数値の範囲

数値を受け取るための要素はh:inputTextです。これをセパレート型のタグにして間にバリデーション用のタグを置きます。

<h:inputText value=”#{answerBean.brand}”>
<f:validateLongRange minimum=”1″ maximum=”6″/>
</h:inputText>

このf:validateLongRangeタグはh:inputText タグに入力された整数の範囲をチェックするものです。 minimumには最小値、maximumには最大値をセットします。片方だけを指定することもできます。

このほか浮動小数の数値範囲をチェックするためのf:validateDoubleRangeタグもあります。

leaf文字数

文字数のチェックはf:validateLengthタグを使います。minimumかmaxmumの片方指定もできます。

4文字以上10 文字以下でユーザーID をどうぞ:
<h:inputText id=”user” value=”#{sampleBean.sometext}”>
<f:validateLength minimum=”4″ maximum=”10″/>
</h:inputText>

leaf

例として必須入力と整数範囲をやってみます。つぎのようなフォームでもしラジオボタンも数字も入力せずに送信ボタンを押すと画面のように下にメッセージが出ます。

160605-1err1

このメッセージはJSFに組み込まれているものです。また、ラジオボタンは選択されているが入力数値が7で範囲外になっている場合は

1605-2err2

日本語が少し変ですが意味はわかります。(メッセージ変更もめんどうですがやればできます)

このソースコードは次のとおりです。洋服ブランド名はマネージドビーンから情報を取り出して表示しています。これは次のセクションでちょっと説明します。

[validation.xhtml]・・・入力ページ

・・・
<h2>アンケートへご協力ください</h2>
・・・
<h:outputText value=”性別”/>
<h:panelGrid columns=”1″>
<h:selectOneRadio value=”#{answerBean.gender}” required=”true”>
<f:selectItem itemValue=”男性” itemLabel=”男性”/>
<f:selectItem itemValue=”女性” itemLabel=”女性”/>
</h:selectOneRadio>
・・・
<h:outputText value=”好きな洋服ブランド”/>
・・・
<ol>
<ui:repeat var=”item” value=”#{answerBean.brandList}”>
<li type=”1″>#{item}</li>
</ui:repeat>
</ol>
<h:inputText value=”#{answerBean.brand}”>
<f:validateLongRange minimum=”1″ maximum=”6/>
</h:inputText>
・・

[questionnaireResult.xhtml]

・・・

<h:panelGrid styleClass=”grid1″ columns=”2″>
<h:outputText value=”【回答】”/>
<h:outputText value=””/>
<h:outputText value=”性別: ”/>
<h:outputText value=”#{answerBean.gender}”/>
<h:outputText value=”好きなブランド: ”/>
<h:outputText value=”#{answerBean.brandName}”/>
</h:panelGrid>

・・・

正常に実行されると次のように表示されます。

160605-3result

leafマネージドビーンの工夫

前の画像で「好きなブランド」の回答が数字ではなく名前になっていますが、これはビーンに少し工夫を加えました。

まず配列brandListでブランド名を用意しておきます。アンケートのブランド名表示のころはui:repeatタグでgetBrandList()メソッドが自動的にコールされますから、このブランド名配列が返されるのです。ui:repeatタグはArrayListや配列を扱うことができます。

ユーザーからの情報はbrandプロパティに1から6の数字で入ってきますので、そのセッターであるsetBrand(String brand)メソッドのところで、数値をインデックスとしてbrandList配列から名前を参照してきて選択されたブランド名を入れる変数brandNameにセットします。結果のページでは#{answerBean.brandName}でこれを表示します。

[AnswerBean.xhtml]

・・・
public class AnswerBean {

String gender;
String brand;
String brandName;
final String[] brandList={“Marc Jacobs”,”EMODA”,”EGOIST”,”MURUA”,”dazzlin”,”その他”};

・・・
public void setBrand(String brand) {
this.brand = brand;
setBrandName(brandList[Integer.parseInt(brand)-1]);
}

public String getBrandName() {
return brandName;
}

public void setBrandName(String brandName) {
this.brandName = brandName;
}

public String[] getBrandList() {
return brandList;
}
}

leafまとめ

必須項目        <h:selectOneRadio …. required=”true”>
整数のチェック     f:validateLongRange
浮動小数のチェック  f:validateDoubleRange

previousnext

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA