重复显示jsf primefaces验证消息

时间:2012-06-20 05:01:48

标签: jsf primefaces datatable message

我正在使用primefaces 3.3。

我有一个像这样的dataTable:

<p:dataTable value="#{someBean.items}" var="item" ..>
  <p:column>
    <p:inputText id="someInputText" validation="#{someBean.someValidator}">
  </p:column>
  ..
</p:dataTable>

验证器是标准的:

public void someValidator (FacesContext context, UIComponent component, Object value) throws ValidatorException {

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

我遇到的问题是,如果dataTable中有多个项目,并且如果对其中一个项目的inputText组件“someInputText”的验证失败,则会为每个项目显示验证错误消息。

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

2 个答案:

答案 0 :(得分:3)

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

<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>

答案 1 :(得分:-1)

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

那是:

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