3

次の素数データが​​与えられた場合

<p:dataTable value="#{cc.attributes.playerCollection}" var="player"
    widgetVar="playerWidgetTable" emptyMessage="#{uimsg.ui_not_recordsfound}">
    <!-- filter event handler  -->
    <p:ajax event="filter" listener="#{cc.attributes.viewBean.listenFilter}" update="@this"/>

    <!-- Player first name  -->
    <p:column id="firstnameColumn" headerText="#{uimsg.firstname}"
        filterBy="#{player.firstName}" filterMatchMode="contains">
        <h:outputText value="#{player.firstName}" />
    </p:column>
</p:dataTable>

ユーザーがフィルター textcolumn で指定したフィルター「テキスト」値を (サーバー側で) 取得するにはどうすればよいですか?

「listenFilter」でフィルターイベントをリッスンしようとしました:

@ManagedBean
@ViewScoped
public class PlayerListBean implements Serializable {

......

    public void listenFilter(FilterEvent event) {
        // update datasource
        Map<String, String> tempString = event.getFilters();

        System.out.println("size filter: "+ tempString.size());
        for (String key : tempString.keySet()) {
            System.out.println("key: " + key + " \t values: "
                    + tempString.get(key));

        }

    }

}

しかし、私はそれで何かを始めることはできません。他のオプションはありますか?バインドされたコンポーネントとして DataTable を操作するのと同じですか?

ありがとう

4

2 に答える 2

3

これは私にとってはうまくいきます...

public void listenFilter(FilterEvent event) {

    DataTable table = (DataTable) event.getSource();
    Map<String, String>  filters = table.getFilters();
    //grab the value from the required map key (somePropertyName if your filterBy 
     looks like filterBy="#{myBean.somePropertyName}") ... 

}
于 2012-11-13T18:30:50.883 に答える
1

私が通常行っていることは、実際の DataModel を使用して dataTable コンポーネントにフィードすることです。プレーンなコレクションを使用するのではなく、そうしているようです (残りの Bean を投稿していません)。LazyDataModel クラスを拡張し、load() メソッドをオーバーライドします。その署名は次のとおりです。

public List load(int first, int size, String column, SortOrder order, Map<String, String> filter);

この場合、フィルター フィールド (マップ) には、ユーザーが各フィルターに入力した内容が含まれます。また、フィルター用の ajax リスナーは実際には必要ありません。私は自分のプロジェクトでこれを使用していますが、問題なく動作します。さらにサポートが必要な場合はお知らせください。

于 2012-11-13T18:12:33.823 に答える