【发布时间】:2011-12-14 16:09:51
【问题描述】:
我正在编写一个 JSF 页面,用户可以在其中更改他的密码。我的解决方案基于 David Geary 和 Cay S. Horstmann 的 JavaServer Faces(第 3 版)书中的代码示例。这是我的代码:
<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" />
部分AccountBean.java:
@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: pl.edu.pw.mini.smartdialer.presentation.AccountBean@d1ff44.validateOldPassword(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
它声称找不到方法,为什么? 这几乎是从书中复制/粘贴的内容,但仍然无法正常工作。 我不知道在哪里可以找到错误。你能帮帮我吗?
【问题讨论】:
-
看起来不错。确定您确实正确地重建/重新部署了 WAR 并最终重新启动了服务器(或者服务器本身正确地支持自动热部署)?没有该方法的旧类可能仍位于服务器的工作文件夹中。如果这不能解决问题,那么为了消除可能的 CDI 噪音,请尝试使用
javax.faces.bean包中的@ManagedBean @SessionScoped(或更好的@ViewScoped)。 -
有什么反馈吗?在过去的 7 个小时里,我看到你多次上线。如果您不提供任何反馈,我们应该如何回答这个问题?我还查看了您的问题历史,发现您基本上对 CDI 有疑问。它似乎在任何情况下都不起作用。因此,再次排除一个和另一个,请用 JSF 注释替换 CDI 注释并重试。如果这在所有情况下都有效,那么对您当前以及可能所有其他问题的明确答案应该足够简单。
-
现在,我辞去了 CDI 注释的工作。我使用
@ManagedBean和@ManagedProperty注释成功了,所以我认为现在不是我使用CDI 的时候。
标签: validation jsf-2