Myfaces,facesContext.messageList总是为空,除非它的父有一个render =“#{not empty facesContext.messageList}”

时间:2013-07-21 13:18:08

标签: jsf myfaces

我想用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>

0 个答案:

没有答案