我想用 JSF2 ajax 和 Bean Validation 创建一个简单的注册表单,ui:repeat value="#{facesContext.messageList}" var="m"
当验证失败时,它允许在该区域显示所有自定义格式的错误消息。我的代码在 Mojarra 上运行良好,但是当我切换到 Myfaces2.1 时,消息永远不会显示ui:repeat
- 它只在ol
那里留下一个空标签,而且facesContext.messageList
似乎是空的。它仍然可以使用,h:messages
但这不是我想要的。
但是,今天我发现了一个奇怪的解决方法:将属性添加rendered="#{not empty facesContext.messageList}"
到ui:repeat
的父组件之一。
我不明白为什么这rendered="..."
很重要,因为 errorDisplay 组件确实每次都会重新渲染。这个测试#{not empty facesContext.messageList}
有什么改变吗?
<h:form>
Name:<h:inputText value="#{hello.name}" id="name"/>
<br/>
Age :<h:inputText value="#{hello.age}" id="age" converterMessage="'Age'必须是一个数字"/>
<h:commandLink value="register" type="submit">
<f:ajax execute="@form" render="errorDisplay"/>
</h:commandLink>
<h:panelGroup> <!--rendered="#{not empty facesContext.messageList}"-->
<h:panelGroup id="errorDisplay"><!--rendered="#{not empty facesContext.messageList}"-->
<span>发生以下错误:</span>
<ol style="color:red;">
<ui:repeat value="#{facesContext.messageList}" var="m">
<li>${m.detail}</li>
</ui:repeat>
</ol>
</h:panelGroup>
</h:panelGroup>
</h:form>