Javaクラスでの入力チェック
今回はJavaクラスで入力チェックを行い、
それを画面に表示させる方法について書きます。
【内容】
前回と同じくサンプルはログイン画面っぽい「index.xhtml」を使います。
<?xml version="1.0" encoding="Windows-31J" ?> <!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:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"> <f:view> <h:head> <meta http-equiv="Content-Type" content="text/html; charset=Windows-31J" /> <title>ログイン</title> <style> li.errorStyle { color : orange; } li.infoStyle { color : black; } li.warnStyle { color : blue; } li.fatalStyle { color : red; } </style> </h:head> <h:body> <h:form id="loginForm"> <div id="userIdRow"> <span id="userIdLabel">ユーザID</span> <span id="userIdInput"> <h:inputText id="userId" value="#{indexPage.userId}" label="ユーザID" /> <h:message for="userId"/> </span> </div> <div id="passwordRow"> <span id="passwordLabel">パスワード</span> <span id="passwordInput"> <h:inputSecret id="password" value="#{indexPage.password}" label="パスワード" /> </span> <h:message for="password" errorStyle="color : blue;"/> </div> <div> <h:commandButton action="#{indexPage.login}" value="ログイン" /> </div> <h:messages id="message1" infoClass="infoStyle" warnClass="warnStyle" errorClass="errorStyle" fatalClass="fatalStyle" /> </h:form> </h:body> </f:view> </html>
今回は
ユーザIDとパスワードの必須入力チェックも消しています。
続いてJavaクラス側のソースです。
@ManagedBean(name = "indexPage") @RequestScoped public class IndexPageImpl { /** ユーザID */ private String userId = null; /** パスワード */ private String password = null; public String login() { FacesContext context = FacesContext.getCurrentInstance(); if ("".equals(userId)) { context.addMessage("", new FacesMessage(FacesMessage.SEVERITY_INFO, "INFOです(サマリ)", "INFOです(詳細)")); context.addMessage("", new FacesMessage(FacesMessage.SEVERITY_WARN, "WARNです(サマリ)", "WARNです(詳細)")); context.addMessage("", new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERRORです(サマリ)", "ERRORです(詳細)")); context.addMessage("", new FacesMessage(FacesMessage.SEVERITY_FATAL, "FATALです(サマリ)", "FATALです(詳細)")); } return ""; } // アクセサメソッドは省略 }
メッセージを追加するにはFacesContext#addMessageメソッドを使います。
FacesContext#getCurrentInstanceメソッドでFacesContextのインスタンスを取得します。
FacesContextはリクエストごとに生成されるJSFの状態を保持するクラスです。
addMessageメソッドにはクライアントIDとFacesMessageクラスのオブジェクトを
パラメータとして渡します。
クライアントIDの役割がわかっていませんが、とりあえず、空白で動くようです。
FacesMessageクラスのコンストラクタはいくつかありますが、
今回はメッセージの種類も指定するので、3つのパラメータを受け取るコンストラクタを使います。
一つ目のパラメータはメッセージの種類です。
INFO、WARN、ERROR、FATALの四つが用意されています。
二つ目のパラメータは概要メッセージ、三つ目は詳細メッセージになります。
loginメソッドの戻り値についてですが、
nullや空白を返却すると元のページが表示されます。
戻り値をvoidにしても同様の動きをします。
メッセージが表示されました。
それぞれ設定したメッセージの種類に対応するCSSのクラスが適用されています。
メッセージを見てみると概要メッセージしか出ていません。
<h:messages id="message1" infoClass="infoStyle" warnClass="warnStyle" errorClass="errorStyle" fatalClass="fatalStyle" showDetail="true" />
詳細メッセージが表示されました。
概要メッセージはshowSummary属性を「false」にすると表示されません。
Javaクラスでのメッセージの設定は
(もしかしたら、あるのかもしれませんが・・・)