1

我正在使用primefaces 3.3。

我有一个如下所示的数据表:

<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”的验证仅针对其中一个项目失败,则为每个项目显示验证错误消息。

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

4

2 回答 2

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>
于 2012-06-20T06:15:28.033 回答
-1

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

那是:

if(someCondition) {
    throw new ValidatorException(
                    new FacesMessage(FacesMessage.SEVERITY_ERROR, component.getClientId(), "validation failed"));
  }
于 2012-06-22T14:08:12.007 回答