【问题标题】:How can we use multiple <h:messages> tags or <h:message> tags in a single JSF page?我们如何在单个 JSF 页面中使用多个 <h:messages> 标签或 <h:message> 标签?
【发布时间】:2012-10-26 07:50:10
【问题描述】:

我的问题是我在一个 JSF 页面中有 2 个表单,每个表单都有 &lt;h:message&gt;&lt;h:messages&gt; 标记。我们知道消息/消息标签会打印任何验证错误,所以会发生什么,假设我将 2 个表单中的任何一个的字段留空,它应该打印“字段不能留空”或某种消息。它给出了这个消息,但它给出了两次,因为有两种形式。所以我在这两种表单中都看到了相同的错误/验证消息。

所以我需要的是&lt;h:messages&gt;&lt;h:message&gt; 标签应该只为它们各自的表单显示一次错误/验证消息!!

所以任何帮助将不胜感激!

【问题讨论】:

  • 我警告你在一个页面中使用两个表单,因为ie不支持这个功能
  • @mucayufa 如果 IE 不支持页面上的两种表单,那将是 IE 中的一个主要错误。也许您的目标是嵌套表单,它不是有效的 HTML,并且可能/将导致所有浏览器中的错误。
  • 您使用的是嵌套表单吗?请提供您页面的示例 jsf 代码。你试过&lt;rich:message 组件和for 属性吗?
  • @Matt ı 并不意味着嵌套形式。我在一个页面中使用了两个单独的表单,但是出现了兼容性问题。

标签: jsf


【解决方案1】:

如果您使用的是 JSF 2,那么您可以通过 ajax 提交和更新表单。这允许部分更新视图。

<h:form>
    <h:messages />
    ...
    <h:commandButton ...>
        <f:ajax execute="@form" render="@form" />
    </h:commandButton>
</h:form>

<h:form>
    <h:messages />
    ...
    <h:commandButton ...>
        <f:ajax execute="@form" render="@form" />
    </h:commandButton>
</h:form>

或者,如果您因为某些不明显的原因不能/不想使用 ajax,或者仍在使用旧版 JSF 1.x,则检查 &lt;h:messages&gt;rendered 属性,如果所需的形式是有没有submitted

<h:form binding="#{form1}">
    <h:messages rendered="#{form1.submitted}" />
    ...
    <h:commandButton ... />
</h:form>

<h:form binding="#{form2}">
    <h:messages rendered="#{form2.submitted}" />
    ...
    <h:commandButton ... />
</h:form>

顺便说一句,&lt;h:message&gt; 不应该有这个问题,这与你在问题中暗示的相反。

【讨论】:

  • @BalusC :当我使用您的第二个解决方案时,我得到以下异常。 javax.servlet.ServletException: Component ID j_idt171:j_idt99 has already been found in the view.
  • @Rasoul:显然您出于某种原因将其绑定到共享 bean 属性。不要将它绑定到 bean 上,绝对不要绑定到由多个组件共享的属性。答案中的代码按原样完整。不要使用#{bean.form1} 左右。只需使用#{form1}。另见stackoverflow.com/questions/14911158/…
  • @BalusC 你的猜测是正确的。我在一个 jsf 页面中有 2 个表单,并为这些表单使用了一个共享 bean。我为&lt;h:messages&gt; 设置了id。 form1Mess 和 form2Mess。它返回给我以下异常:Component ID contact:form1Mess has already been found in the view. 你认为除了单独的表单 bean 之外没有任何解决方案?
  • @Rasoul:不要使用#{bean.form1}左右。只需使用#{form1}。您根本不需要 bean 中的那些组件。
  • @BalusC :我只使用#{form1}。查看我的代码:&lt;h:form binding="#{form1}" id="contact"&gt;&lt;h:form binding="#{form2}" id="personal"&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多