Я пытаюсь разместить меню selectOneButton вне моей таблицы данных и заставить его принудительно применить фильтр (как если бы фильтр был заголовком фасета, как в демоверсии)
По существу:
- Выберите значение (true / false / null для обоих)
- Передайте это значение в функцию JS, которая затем принудительно отфильтрует столбец состояния
SelectOneButton передает значениезначение правильно
<script>
function test(val){
console.log(val);
$("#allUsersForm\\:myTable\\:statusColumn\\:filter").val(val);
$("#allUsersForm\\:myTable\\:statusColumn\\:filter").trigger('keyup');
}
</script>
<h:form>
<p:selectOneButton widgetVar="statusSelectWidget"
onchange="test(PF('statusSelectWidget').inputs.filter(':checked').val());">
<f:selectItem itemLabel="All" itemValue="" />
<f:selectItem itemLabel="A" itemValue="true" />
<f:selectItem itemLabel="I" itemValue="false" />
</p:selectOneButton>
</h:form>
<h:form id="allUsersForm">
<p:dataTable
id="myTable"
var="user"
widgetVar="userListWidget"
filteredValue="#{myController.filteredUsers}"
value="#{myController.allUsers}">
<p:column id="statusColumn" style="width:10%;" headerText="Status" sortBy="#{user.isActive}"
filterBy="#{user.isActive}" filterMatchMode="equals"
filterStyle="display:none;">
<f:facet name="filter">
<p:selectOneButton style="display:none;" widgetVar="inTableStatusWidget" onchange="PF('userListWidget').filter()">
<f:converter converterId="javax.faces.Boolean" />
<f:selectItem itemLabel="All" itemValue="" />
<f:selectItem itemLabel="A" itemValue="true" />
<f:selectItem itemLabel="I" itemValue="false" />
</p:selectOneButton>
</f:facet>
<h:outputText value="#{user.isActive ? 'Active' : 'Inactive'}" />
</p:column>
</p:dataTable>
</h:form>
Есть идеи?Я хочу избежать необходимости самому фильтровать или делать обратный вызов компоненту поддержки, если это необходимо.