編集:読む前に、この解決策が完全に機能することを考慮してください。答えは2012年7月のものです。したがって、気に入らなかったという理由だけで私に反対票を投じないでください。世界は変化し、今ではより優れたコンポーネントとソリューションがあります。
解決策がなければ、私は醜い方法で検証を行うことを余儀なくされました(推奨されません)。少なくとも、より良い解決策が見つかるまでは機能します。
アクションを返すメソッドでは、両方の値をチェックします。値が異なる場合は、コンテキストにエラーメッセージを追加し、ナビゲーションハンドラーにnullを返します。
package com.jsf.beans.user;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.component.html.HtmlInputSecret;
import org.apache.commons.lang.StringUtils;
import com.pichler.jsf.beans.base.JsfViewBean;
@ManagedBean(name = "changePassword")
@RequestScoped
public class ChangePassword extends JsfViewBean {
private HtmlInputSecret inputSecret1, inputSecret2;
/**
* @return the inputSecret1
*/
public HtmlInputSecret getInputSecret1() {
return inputSecret1;
}
/**
* @param inputSecret1
* the inputSecret1 to set
*/
public void setInputSecret1(HtmlInputSecret inputSecret1) {
this.inputSecret1 = inputSecret1;
}
/**
* @return the inputSecret2
*/
public HtmlInputSecret getInputSecret2() {
return inputSecret2;
}
/**
* @param inputSecret2
* the inputSecret2 to set
*/
public void setInputSecret2(HtmlInputSecret inputSecret2) {
this.inputSecret2 = inputSecret2;
}
private String password1, password2;
public String alterar() {
if (!StringUtils.equals(password1, password2)) {
addErrorMessage(inputSecret1.getClientId(),
"As senhas não coincidem");
addErrorMessage(inputSecret2.getClientId(),
"As senhas não coincidem");
return null;
}
return null;
}
/**
* @return the password1
*/
public String getPassword1() {
return password1;
}
/**
* @param password1
* the password1 to set
*/
public void setPassword1(String password1) {
this.password1 = password1;
}
/**
* @return the password2
*/
public String getPassword2() {
return password2;
}
/**
* @param password2
* the password2 to set
*/
public void setPassword2(String password2) {
this.password2 = password2;
}
}
* JsfViewBeanは、「addMessages」のようないくつかの一般的なメソッドを持つ単なるクラスです。