仅允许数字到Primefaces中dataTable的过滤文本框(搜索过滤器)

时间:2013-05-14 11:31:59

标签: jsf primefaces

是否可以通过自定义对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支持还是有办法自定义它?

2 个答案:

答案 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"在整个应用程序或页面中的任意数量的列上。