JavaのWebアプリケーションフレームワークであるJSFを仕事で使う機会があったので、
備忘録を残そうと思います。
- 使用環境
- NetBeans8.2
- JavaEE7.0
- GlassFish4.1.1
JSFのバリデータ
入力された値の検証ですね。
基本的にviewであるxhtml内の記述だけで設定できるバリデータだけでは、
限られた検証しかできないのでバリデーションクラスを作成することになります。
ですがまずはバリデーションクラスを作成せずに設定できるものを紹介します。
紹介するサンプルのManagedBeanは全てこのソースを使います。
【ManagedBean】
import javax.inject.Named;
import javax.enterprise.context.Dependent;
@Named(value = "managedBean")
@Dependent
public class ManagedBean {
private String txtInput;
public String getTxtInput() {
return txtInput;
}
public void setTxtInput(String txtInput) {
this.txtInput = txtInput;
}
}必須入力

未入力に対してエラーメッセージを出力するパターンです。
以下の2通りの実装方法があります。
【required属性を有効にする】
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>validation sample</title>
</h:head>
<h:body>
<h:form>
テキストボックス:
<h:inputText value="#{managedBean.txtInput}" required="true" requiredMessage="未入力です" />
<h:commandButton value="バリデータテスト" />
</h:form>
</h:body>
</html>
【f:validateRequiredを使用する】
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
<title>validation sample</title>
</h:head>
<h:body>
<h:form>
テキストボックス:
<h:inputText value="#{managedBean.txtInput}" requiredMessage="未入力です" >
<f:validateRequired />
</h:inputText>
<h:commandButton value="バリデータテスト" />
</h:form>
</h:body>
</html>
ちなみにエラーメッセージの出力箇所を変えたい時はh:messageタグを使用します。
【h:messageで対応するinputのidを指定する】
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
<title>validation sample</title>
</h:head>
<h:body>
<h:form>
テキストボックス:
<h:inputText id="inputText" value="#{managedBean.txtInput}" requiredMessage="未入力です" >
<f:validateRequired />
</h:inputText>
<h:message for="inputText" style="color: #FF0000"/>
<div><h:commandButton value="バリデータテスト" /></div>
</h:form>
</h:body>
</html>
値の範囲検証
【整数値の範囲検証】
【f:validateLongRangeを使用する】
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
<title>validation sample</title>
</h:head>
<h:body>
<h:form>
テキストボックス:
<h:inputText id="inputText" value="#{managedBean.txtInput}" validatorMessage="0から10の値を入れてください">
<f:validateLongRange minimum="0" maximum="10"/>
</h:inputText>
<h:message for="inputText" style="color: #FF0000"/>
<div><h:commandButton value="バリデータテスト" /></div>
</h:form>
</h:body>
</html>
メッセージの出力内容はvalidatorMessage属性で指定しています。
整数値の最小値・最大値はf:validateLongRangeタグのminimum・maximum属性で指定します。
【小数値の範囲検証】
【f:validateDoubleRangeを使用する】
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
<title>validation sample</title>
</h:head>
<h:body>
<h:form>
テキストボックス:
<h:inputText id="inputText" value="#{managedBean.txtInput}" validatorMessage="0.0から11.11の値を入れてください">
<f:validateDoubleRange minimum="0.0" maximum="11.11"/>
</h:inputText>
<h:message for="inputText" style="color: #FF0000"/>
<div><h:commandButton value="バリデータテスト" /></div>
</h:form>
</h:body>
</html>
こちらもメッセージの出力内容にはvalidatorMessage属性を、
小数値の最小値・最大値はf:validateDoubleRangeタグのminimum・maximum属性で指定します。
【入力桁数の範囲検証】
【f:validateLengthを使用する】
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
<title>validation sample</title>
</h:head>
<h:body>
<h:form>
テキストボックス:
<h:inputText id="inputText" value="#{managedBean.txtInput}" validatorMessage="最小1桁最大8桁入力して下さい">
<f:validateLength minimum="1" maximum="8"/>
</h:inputText>
<h:message for="inputText" style="color: #FF0000"/>
<div><h:commandButton value="バリデータテスト" /></div>
</h:form>
</h:body>
</html>こちらもメッセージの出力内容にはvalidatorMessage属性を、
桁数の最小値・最大値はf: validateLengthタグのminimum・maximum属性で指定します。
あくまで桁数であって、バイト数ではありません。
正規表現指定
正規表現を指定するためのタグも存在します。
【f:validateRegexを使用する】
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
<title>validation sample</title>
</h:head>
<h:body>
<h:form>
テキストボックス:
<h:inputText id="inputText" value="#{managedBean.txtInput}" validatorMessage="郵便番号を-(ハイフン)付きで入力して下さい">
<f:validateRegex pattern="^\d{3}-\d{4}$"/>
</h:inputText>
<h:message for="inputText" style="color: #FF0000"/>
<div><h:commandButton value="バリデータテスト" /></div>
</h:form>
</h:body>
</html>f:validateRegexのpattern属性に正規表現を指定します。
JSFのview内で設定できる基本的なバリデータを紹介しました。
バリデーションクラスの作成まで載せるつもりでしたが、意外と長くなってしまったので次回の記事にまとめます。
今回はここまでです。


コメント