2

我想用 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>发生以下错误:&lt;/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>
4

0 回答 0