我有两个h:表单和单个h:其中一个消息。如何仅显示该表单中的验证错误?我想忽略来自其他形式的所有消息。
答案 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>