在我的 JSF/Facelets 应用程序中,下面是我的表单的部分简化版本:
<h:form id="myform">
<h:inputSecret value="#{createNewPassword.newPassword1}" id="newPassword1" />
<h:message class="error" for="newPassword1" />
<h:inputSecret value="#{createNewPassword.newPassword2}" id="newPassword2" />
<h:message class="error" for="newPassword2" />
<h:commandButton value="Continue" action="#{createNewPassword.continueButton}" />
</h:form>
我希望能够根据 continueButton() 方法中发生的情况将错误分配给特定的 h:message 标签。需要为 newPassword 和 newPassword2 显示不同的错误。验证器实际上不起作用,因为将提供结果(来自数据库)的方法是在 continueButton() 方法中运行的,运行两次代价太高。
我不能使用 h:messages 标签,因为页面有多个地方需要显示不同的错误信息。当我尝试这样做时,页面显示的每条信息都是重复的。
我试着这样做,但没有成功:
public Navigation continueButton() {
...
expensiveMethod();
if(...) {
FacesContext.getCurrentInstance().addMessage("newPassword", new FacesMessage("Error: Your password is NOT strong enough."));
}
}
我漏掉了什么?如能得到任何帮助,将不胜感激!
我试着这样猜测,但没有成功:
在我看来是对的。你试过明确设置消息严重性吗?另外,我认为 ID 必须与组件的 ID 相同(也就是说,如果您的 ID 是 newPassword1 或 newPassword2,那么您需要使用 newPassword1 或 newPassword2,而不是示例中的 newPassword)。
FacesContext.getCurrentInstance().addMessage("newPassword1",
new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error Message"));
然后使用 <h:message for="newPassword1" />
在 JSF 页面上显示错误信息。