两种形式和h:消息,决定要显示的消息

时间:2011-12-30 11:34:33

标签: java-ee jsf-2

我有两个h:表单和单个h:其中一个消息。如何仅显示该表单中的验证错误?我想忽略来自其他形式的所有消息。

1 个答案:

答案 0 :(得分:2)

由于您已经使用JSF2,请考虑通过在必要的位置引入<f:ajax execute="@form" render="@form">来替换异步请求的同步请求。

E.g。

<h:form>
    <h:messages />
    <h:inputText required="true" />
    ...
    <h:commandButton value="submit">
        <f:ajax execute="@form" render="@form">
    </h:commandButton>
</h:form>

<h:form>
    <h:messages />
    <h:inputText required="true" />
    ...
    <h:commandButton value="submit">
        <f:ajax execute="@form" render="@form">
    </h:commandButton>
</h:form>

这样,只有当前<h:form>的内容会在提交时重新呈现。由于使用了ajax,其他好处是更快的反馈和改善的用户体验。

如果由于某种原因这不是一个选项,最好的办法是使用rendered属性有条件地显示<h:messages>组件,具体取决于调用的按钮(其名称=值对(名称为客户端ID)将出现在请求参数映射中)。例如,

<h:form>
    <h:messages rendered="#{not empty param[button1.clientId]}" />
    <h:inputText required="true" />
    ...
    <h:commandButton binding="#{button1}" value="submit" />
</h:form>

<h:form>
    <h:messages rendered="#{not empty param[button2.clientId]}" />
    <h:inputText required="true" />
    ...
    <h:commandButton binding="#{button2}" value="submit" />
</h:form>