【问题标题】:How to render h:message only if validation fails for the component仅当组件验证失败时如何呈现 h:message
【发布时间】:2013-07-02 20:08:05
【问题描述】:

我在使用 p:messages 时遇到问题,所以我尝试对每个组件使用 p:message,如下所示:

<div style="position: relative;">
    <h:panelGrid id="messages" columns="1">
      <p:message for="idTxtFirstName" id="msgFirstName" />
      <p:message for="idTxtLastName"  id="msgLastName" />
      <p:message for="idTxtTitle"  id="msgTitle" />
      <p:message for="idTxtCompany" id="msgCompany" />
      <p:message for="idTxtEmail"  id="msgEmail" />
      <p:message for="idTxtPhoneNumber" id="msgPhoneNumber" />
      <p:message for="idEstNumOfUser" id="msgEstNumOfUser" />
    </h:panelGrid>                                          
</div>

即使有任何错误,默认生成的html是:

<table id="betasignup:messages">
<tbody>
<tr>
<td><div id="betasignup:msgFirstName" aria-live="polite"></div></td>
</tr>
<tr>
<td><div id="betasignup:msgLastName" aria-live="polite"></div></td>
</tr>
<tr>
<td><div id="betasignup:msgTitle" aria-live="polite"></div></td>
</tr>
<tr>
<td><div id="betasignup:msgCompany" aria-live="polite"></div></td>
</tr>
<tr>
<td><div id="betasignup:msgEmail" aria-live="polite"></div></td>
</tr>
<tr>
<td><div id="betasignup:msgPhoneNumber" aria-live="polite"></div></td>
</tr>
<tr>
<td><div id="betasignup:msgEstNumOfUser" aria-live="polite"></div></td>
</tr>
</tbody>
</table>

所以我想知道如果只有组件验证失败(通常不是验证失败),如何呈现消息组件,我的意思是在仅相关组件出现验证错误之前不生成任何 html。

【问题讨论】:

  • 嗯?你为什么不只使用一个&lt;p:messages&gt;
  • @BalusC 正如我在其他帖子中告诉你的那样,带有模糊事件的 p:messages 仅显示当前组件的消息并清除其他组件的旧消息,这就是我尝试手动实现 p:messages 的原因克服这个问题。
  • 也就是说,你其他帖子的答案根本没有解决具体问题,但你接受并赏金了吗?
  • @BalusC,不,它实际上保存了消息并做了我想要的,它只有服务器端监听器有问题。
  • 显然你的问题/问题描述与你真正想要的完全不匹配。对于上一个问题,那将是“我想在模糊一个输入字段时验证所有其他输入字段”,因此绝对不是“我想在模糊一个输入字段时为其他输入字段保留以前的消息”。就是有很大的不同。

标签: validation jsf-2 primefaces message


【解决方案1】:

您需要在消息标签中指定应验证的组件的id。如果您想验证 &lt;p:inputText&gt; 的输入,它应该如下所示:

<p:inputText id="inputText" value="#{mrBean.text}"/>
<p:message for="inputText" id="inputTextMessage"/>

只有当组件的 JSF 验证失败时才会呈现消息。

我看到您在邮件的 for 中选择了其他 ID。这应该是这不起作用的原因。

【讨论】:

    猜你喜欢
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 2019-11-22
    • 2011-02-28
    相关资源
    最近更新 更多