私は primefaces 3.5 を使用していますが、selectCheckBoxMenu コンポーネントを使用したいと考えています。実際、私はこのコンポーネントの多くのプロパティを処理しますが、私は巨大なリストを持っており、このリストを遅延で取得したいと思っています。このコンポーネントには遅延プロパティが含まれていません。したがって、filter="custom" と filterFunction プロパティを使用してリストをフィルタリングすることにしました。
これが私のコードです:
<p:selectCheckboxMenu id="personelListesiCheckBoxId"
value="#{gidenKutusuController.secilenKullaniciListesi}"
converter="#{personelConverter}"
label="#{gidenKutusuController.personelLabel}"
filter="true"
filterMatchMode="custom"
filterFunction="customFilter"
panelStyle="width:220px">
<p:ajax event="toggleSelect" process="@this"
onstart="personelGetir();"/>
<p:ajax event="change"
process="@this"
listener="#{gidenKutusuController.listenerPersonelSecildi()}"
update="@this"/>
<f:selectItems value="#{gidenKutusuController.personelListesi}" var="personel"
itemLabel="#{personel.adi} #{personel.soyadi}"
itemValue="#{personel}"/>
</p:selectCheckboxMenu>
<p:remoteCommand process="@this"
action="#{gidenKutusuController.listenerPersonelSecildi()}"
name="personelGetir"
update=":form:personelListesiCheckBoxId"/>
<p:remoteCommand process="@this"
action="#{gidenKutusuController.listenerPersonelListesiLazyGetirByFilter()}"
name="personelListesiniGetirByFilter"
update="@this"/>
そしてこのJavaスクリプトコード:
<script type="text/javascript">
function customFilter(itemLabel, filterValue) {
personelListesiniGetirByFilter({fv: filterValue});
}
</script>
ユーザーがフィルターに入力したときに、その値を取得し、その値でデータベースにクエリを実行し、リストを取得して、リストをselectCheckBoxMenuコンポーネントに設定します。これを行うには、filterMatchMode = "custom"およびfilterFunction = "customFilterを使用します"入力された値を取得するには、通常、ユーザーが入力したときに、customFilter Java スクリプト関数を呼び出す必要がありますが、機能していません。
問題を解決する方法がわかりません。私を助けてください。
これがprimefaces 3.5ガイドです
<p:selectCheckboxMenu value="#{bean.selectedOptions}" label="Movies"
filterMatchMode="custom" filterFunction="customFilter">
<f:selectItems value="#{bean.options}" />
</p:selectCheckboxMenu>
function customFilter(itemLabel, filterValue) {
//return true to accept and false to reject
}