1

dataTablePrimefaces が提供するフィルタリングされたテキスト ボックスをカスタマイズして、そのような検証を適用することは可能ですか。

このテキストボックスが保持できる最大文字数は、 のfilterMaxLength="45"プロパティを使用して設定できます<p:column>。例えば。

<p:column headerText="headerText" sortBy="#{obj.properyName}" filterMaxLength="45" filterBy="#{obj.properyName}">
    <h:outputText value="#{obj.properyName}" />
</p:column>

おそらく正規表現を使用して、特定の文字のみを許可するなど、他の種類の検証を実行するようなプロパティは見当たりません。

とにかく、エンティティ クラスのデータ型にマップされる MySQL データベースの型 (主キー、自動インクリメント)のid列があるため、数字のみを持つことができるようにする必要があります。BIGINTLong

Primefaces でサポートされていますか、それともカスタマイズする方法はありますか?

4

2 に答える 2

2

AFAIK Primefaces にはこのオプションがありません。それを解決するためにjavascriptを使用できます。

制限する列の id を設定する必要があります。入力 (フィルターに使用) にはデフォルトの id があり、数字のみを許可するようfilterに処理します。keydown eventたとえば、1 つのフォーム ( ) を作成し、 1 つのデータテーブル ( )、1 つの列 ( )id="form"をネストし、入力の ID を次にバインドして、ユーザーが入力したキーをフィルター処理します。id="cars"id="cl2"filterkeydown event

<h:form id="form">
<script type="text/javascript">
                //<![CDATA[
                $(document).ready(function() {
                    $("#form\\:cars\\:cl2\\:filter").keydown(function(event) {
                        // Allow: backspace, delete, tab, escape, and enter
                        if ( event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 || 
                            // Allow: Ctrl+A
                        (event.keyCode == 65 && event.ctrlKey === true) || 
                            // Allow: home, end, left, right
                        (event.keyCode >= 35 && event.keyCode <= 39)) {
                            // let it happen, don't do anything
                            return;
                        }
                        else {
                            // Ensure that it is a number and stop the keypress
                            if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105 )) {
                                event.preventDefault(); 
                            }   
                        }
                    });
                });
                //]]>
            </script>
<p:dataTable id="cars">
      <p:column id="cl2" headerText="MANUFAC" filterMatchMode="contains" filterBy="#{carr.manufacturer}">  
</p:dataTable>

も参照してください:jQueryを使用してHTML入力ボックスで数値(0-9)のみを許可する方法は?

于 2013-05-15T09:07:47.120 に答える