如何验证Primefaces dataTable中的List <object> - JSF </object>

时间:2014-02-02 01:53:26

标签: validation jsf primefaces datatable

我有一个类似于手机的dataTable:

<p:dataTable value="#{billingInfoBean.billingProfile.payer.phones}" var="phone" id="payerPhoneTable">

    <p:column>
        <f:facet name="header">
            <h:outputText value="Type" />
        </f:facet>
        <p:selectOneMenu value="#{phone.type}">
            <f:selectItem itemLabel="" itemValue="" />
            <f:selectItems value="#{backOfficeLookupClient.allPhoneTypes}" />
        </p:selectOneMenu>
    </p:column>

    <p:column>
        <f:facet name="header">
            <h:outputText value="Area Code" />
        </f:facet>
        <h:inputText value="#{phone.areaCode}" size="3" maxlength="3" />
    </p:column>

    <p:column>
        <f:facet name="header">
            <h:outputText value="Exchange" />
        </f:facet>
        <h:inputText value="#{phone.exchange}" size="3" maxlength="3" />
    </p:column>

    <p:column>
        <f:facet name="header">
            <h:outputText value="Local" />
        </f:facet>
        <h:inputText value="#{phone.local}" size="4" maxlength="4" />
    </p:column>

    <p:column>
        <f:facet name="header">
            <h:outputText value="Extension" />
        </f:facet>
        <h:inputText value="#{phone.extension}" size="5" maxlength="5" />
    </p:column>
</p:dataTable>

我正在尝试使用对象Phone进行自定义验证。我需要调用一个电话验证服务,它将这些列值作为输入。在这种情况下,我可以在这里使用<f:validator>吗?如果是,怎么做?

2 个答案:

答案 0 :(得分:2)

您可以附加到dataTable验证程序侦听器

<f:event type="postValidate" listener="#{bean.customValidation}"/>

验证bean中的手机对象

public void customValidation(ComponentSystemEvent event) {
    ...
}

然后遍历所有dataTable子级并验证每个子级。

Here这是一个很好的教程。

答案 1 :(得分:2)

这个omnifaces标签解决了我的问题:

http://showcase.omnifaces.org/validators/validateMultiple