Primefaces dataTable单选验证

时间:2016-06-17 16:47:36

标签: validation primefaces datatable

我可以像这样验证p:selectOneMenu

<p:selectOneMenu id="eventTimezoneDropdown"
        value="#{myBean.eventTimeZone}"
        required="true"
        requiredMessage="The TimeZone must be specified."
        effect="none">
    <f:selectItems value="#{myBean.timeZoneItems}"/>
</p:selectOneMenu>

从概念上讲,使用带有单行选择的p:dataTable将实现相同的目标 - 它允许您使用selection属性而不是value属性选择一行并使用{{ 1}}属性而不是value

<f:selectItems>

但我在<p:dataTable id="ActivitiesTable" var="row" value="#{myBean.rows}" selection="#{myBean.selectedRow}" rowKey="#{row.activityId}"> <p:column selectionMode="single"/> ... </p:dataTable> 上看不到任何验证选项(例如required属性)。

是否有一种方法或解决方法可以对p:dataTable p:dataTable上的required属性进行必要的选择验证?

环境:Primefaces 5.3,JSF 2.2.8-14,Tomcat 7.0.68。

2 个答案:

答案 0 :(得分:1)

我在primefaces中知道数据表中没有这个功能,但你可以使用你的代码,

我建议您可以在 ManagedBean 中执行相同的事件,这样您就可以检查是否选择了某行,如果是,那么确定,否则您可以创建一条简单的消息,通知用户需要选择一行:

SELECT MIN(o.date_added) AS date_start, MAX(o.date_added) AS date_end,
       COUNT(*) AS `orders`, SUM((SELECT SUM(op.quantity) FROM `oc_order_product`
       op LEFT JOIN `oc_product_to_category` pc ON (op.product_id = pc.product_id)
       WHERE op.order_id = o.order_id AND pc.category_id = '72' GROUP BY op.order_id))
       AS products, SUM((SELECT SUM(ot.value) FROM `oc_order_total`
       ot WHERE ot.order_id = o.order_id AND ot.code = 'tax' GROUP BY ot.order_id))
       AS tax, SUM(o.total) AS `total` FROM `oc_order` o
       WHERE o.order_status_id > '0' AND DATE(o.date_added) >= '2015-10-01' AND
       DATE(o.date_added) <= '2015-10-22' And o.shipping_postcode = '4545456'

答案 1 :(得分:0)

解决此问题的另一种方法是使用隐藏的输入字段,该字段绑定到在行选择时更新的相同值。

text/html

这样,您可以在<p:dataTable id="ActivitiesTable" var="row" value="#{myBean.rows}" selection="#{myBean.selectedRow}" rowKey="#{row.activityId}"> <p:ajax event="rowSelectRadio" update="@parent:hiddenTimezoneInput" <p:column selectionMode="single"/> ... </p:dataTable> <h:inputHidden id="hiddenTimezoneInput" value="#{myBean.selectedRow}" required="true" requiredMessage="The TimeZone must be specified."/> 上添加常规验证程序(例如必填),并在表单提交时对其进行处理。