重复显示jsf primefaces验证消息

重复显示jsf primefaces验证消息,jsf,primefaces,datatable,message,Jsf,Primefaces,Datatable,Message,我使用的是PrimeFaces3.3 我得到了一个如下所示的数据表: <p:dataTable value="#{someBean.items}" var="item" ..> <p:column> <p:inputText id="someInputText" validation="#{someBean.someValidator}"> </p:column> .. </p:dataTable> <p:d

我使用的是PrimeFaces3.3

我得到了一个如下所示的数据表:

<p:dataTable value="#{someBean.items}" var="item" ..>
  <p:column>
    <p:inputText id="someInputText" validation="#{someBean.someValidator}">
  </p:column>
  ..
</p:dataTable>
<p:dataTable value="#{someBean.items}" var="item">
  <p:column>
    <p:inputText id="someInputText1" validator="#{someBean.someValidator}" value="item.name">
    <p:message id="someInputText1Msg" for="someInputText1" />
  </p:column>
  <p:column>
    <p:inputText id="someInputText2" validator="#{someBean.someValidator}" value="item.model">
    <p:message id="someInputText2Msg" for="someInputText2" />
  </p:column>
</p:dataTable>
我遇到的问题是,如果dataTable中有多个项目,并且如果inputText组件“someInputText”的验证仅对其中一个项目失败,那么每个项目都会显示验证错误消息


有什么办法可以解决这个问题吗?

使用p:message的for属性,如下所示:

<p:dataTable value="#{someBean.items}" var="item" ..>
  <p:column>
    <p:inputText id="someInputText" validation="#{someBean.someValidator}">
  </p:column>
  ..
</p:dataTable>
<p:dataTable value="#{someBean.items}" var="item">
  <p:column>
    <p:inputText id="someInputText1" validator="#{someBean.someValidator}" value="item.name">
    <p:message id="someInputText1Msg" for="someInputText1" />
  </p:column>
  <p:column>
    <p:inputText id="someInputText2" validator="#{someBean.someValidator}" value="item.model">
    <p:message id="someInputText2Msg" for="someInputText2" />
  </p:column>
</p:dataTable>

修改新FacesMessage的创建以使用component.getClientId()而不是“error:”

即:

if(someCondition) {
    throw new ValidatorException(
                    new FacesMessage(FacesMessage.SEVERITY_ERROR, component.getClientId(), "validation failed"));
  }

只是为了确保:您还可以将的redisplay属性设置为false。使用此选项,已呈现的消息将不会再次显示。干杯谢谢你的回答。我试过了,但没用。对不起,你好像不明白我的问题。我的意思是,对于dataTable中的每个单独的项(对象),都有一些重复的inputText。例如,第一个项目的inputText的id将是“someDataTable:0:someInputText”,第二个项目的id将是“someDataTable:1:someInputText”,等等。inputText组件仅对每个项目(对象)重复。我的问题是,如果一个项目的inputText通过了验证,而另一个项目没有通过验证,那么两个inputText都会显示验证消息。如果观察ClientID someDataTable:0:someInputText和someDataTable:1:someInputText。someDataTable是datatable的id,后跟rowindex,然后是someInputText,它是inputText的id。您对inputText使用相同的ID,您需要为每一行的inputText提供唯一的ID,然后通过for属性将其引用,使其仅显示该特定inputText的消息。您的页面上是否有用于捕获全局错误的组件?和/或每个输入字段是否都有?或者您的代码与上面的代码一样,没有组件吗?请查看您原始问题的注释中的我的问题,如果以下问题无法解决您的问题,请予以答复