我可以像这样验证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。
答案 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."/>
上添加常规验证程序(例如必填),并在表单提交时对其进行处理。