是否可以通过自定义对dataTable
个Primefaces提供的过滤文本框应用此类验证。
可以使用filterMaxLength="45"
的{{1}}属性设置此文本框可容纳的最大字符数。例如。
<p:column>
我看不到这样的属性来执行其他类型的验证,例如只允许使用正则表达式的特定字符。
无论如何,我需要允许它只有数字,因为在MySQL数据库中有一个<p:column headerText="headerText" sortBy="#{obj.properyName}" filterMaxLength="45" filterBy="#{obj.properyName}">
<h:outputText value="#{obj.properyName}" />
</p:column>
类型id
(主键,自动增量),它被映射到{{ 1}}实体类中的数据类型。
是Primefaces支持还是有办法自定义它?
答案 0 :(得分:2)
AFAIK Primefaces没有此选项。你可以使用javascript来解决这个问题。
您必须为要限制的列设置id,输入(用于过滤器)的默认ID为filter
,然后您处理keydown event
以仅允许数字。例如,我创建一个表单(id="form"
),并嵌套一个数据表(id="cars"
),一列(id="cl2"
)和输入的id是filter
,然后我绑定{ {1}}过滤用户输入的键:
keydown event
另见:How to allow only numeric (0-9) in HTML inputbox using jQuery?
答案 1 :(得分:0)
扩展 Rong Nguyen 的回答。
在您的javascript方法中,找到Filter
组件。您可以在filterStyleClass
上使用p:column
属性,而不是向下导航DOM树元素。
以下是一个例子:
<p:column id="cl2" headerText="MANUFAC" filterStyleClass="filterNumbersOnly" filterMatchMode="contains" filterBy="#{carr.manufacturer}">
在你的JS方法中,你可以使用该类来获取元素:
<script type="text/javascript">
//<![CDATA[
$(document).ready(function() {
$(".filterNumbersOnly").keydown(function(event) {
//Your logic to restrict numbers only goes here
}
})
</script>
优点是,因为此方法是基于CSS类的元素选择。
您可以在应用程序中编写此JS函数一次,并将此类应用于:filterStyleClass="filterNumbersOnly"
在整个应用程序或页面中的任意数量的列上。