我正在編寫一個JSF頁面,用戶可以在其中更改密碼。我基於David Geary和Cay S. Horstmann撰寫的JavaServer Faces(第3版)一書中的代碼示例來構建我的解決方案。這裏是我的代碼:未找到驗證方法
部分 AccountBean.java<h:inputText id="oldPassword" required="true"
validator="#{accountBean.validateOldPassword}">
<f:ajax event="blur" render="oldPasswordError" />
</h:inputText>
<h:message for="oldPassword" id="oldPasswordError" style="color: red" />
:
@Named("accountBean")
@SessionScoped
public class AccountBean implements Serializable {
private String login;
private String password;
(...)
public void validateOldPassword(FacesContext context, UIComponent component, Object value) {
if (!(((String)value).equals(password)))
throw new ValidatorException(new FacesMessage("Invalid password"));
}
}
現在,當我部署到這個JBoss AS中7.0.2,並嘗試使用我得到這樣的錯誤呈現近老密碼字段:
/changePassword.xhtml @28,54 validator="#{accountBean.validateOldPassword}": Method not found: [email protected]ateOldPassword(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
它聲稱該方法無法找到,爲什麼呢? 這幾乎是從書中複製/粘貼,仍然無法正常工作。 我不知道在哪裏可以找到一個bug。你可以幫幫我嗎?
看起來不錯。當然,你確實重建/重新部署了WAR並最終重新啓動了服務器(或者服務器本身正確支持auto-hotdeploy)?沒有該方法的舊類可能仍然在服務器的工作文件夾中。如果不能解決這個問題,那麼爲了消除可能的CDI噪聲,請改用`javax.faces.bean`包中的`@ManagedBean @ SessionScoped`(或更好的方法``ViewScoped`)。 – BalusC 2011-12-14 16:22:57