[英]primefaces datatable filter do not work in subsequent clicks
我有一個primefaces視圖,其中使用下拉列表過濾了特定的列(“任務狀態”)。 當我第一次從過濾器列表中選擇一個值時,過濾器可以正常工作,但是在隨后的過濾器選擇中,該表未刷新(我的視圖已死)。
這是視圖代碼:
<p:dataTable id="tasksDataTable"
var="cRTaskData"
value="#{taskCenterBean.cRTaskList}"
widgetVar="tasksTable"
paginator="true"
sortMode="multiple"
filteredValue="#{taskCenterBean.cRTaskListFiltered}"
rows="10"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="10,15,20,30"
paginatorAlwaysVisible="false">
<p:ajax event="filter" update="@this"/>
<p:column sortBy="#{cRTaskData.taskId}" headerText="ID" style="width:40px;text-align:center;">
<h:outputText value="#{cRTaskData.taskId}" />
</p:column>
<p:column filterBy="#{cRTaskData.status}"
filterMatchMode="exact"
filterOptions="#{taskCenterBean.cRTaskListOptions}"
headerText="Task Status" style="width:110px;text-align:center;">
<h:outputText value="#{cRTaskData.status}" />
</p:column>
...
<p:column style="width:90px;text-align:center;">
<p:commandButton value="View"
action="#{imageBrowserBean.openTaskInEditor(cRTaskData.taskId)}"
icon="ui-icon-image" />
</p:column>
...
</p:dataTable>
這里是相關的back bean代碼:
@ManagedBean(name = "taskCenterBean")
@ViewScoped
public class TaskCenterBean implements Serializable {
private final static String[] cRTaskStatuses = {"Open","Submitted","Closed","Conflict"};
private List<CRImageData> cRTaskList;
private List<CRImageData> cRTaskListFiltered;
private SelectItem[] cRTaskListOptions;
public List<CRImageData> getcRTaskList() {
return cRTaskList;
}
public List<CRImageData> getcRTaskListFiltered() {
return cRTaskListFiltered;
}
public void setcRTaskListFiltered(List<CRImageData> cRTaskListFiltered) {
this.cRTaskListFiltered = cRTaskListFiltered;
}
public SelectItem[] getcRTaskListOptions() {
return cRTaskListOptions;
}
private SelectItem[] createFilterOptions(String[] data) {
SelectItem[] options = new SelectItem[data.length + 1];
options[0] = new SelectItem("", "Select");
for(int i = 0; i < data.length; i++) {
options[i + 1] = new SelectItem(data[i], data[i]);
}
return options;
}
@SuppressWarnings("unchecked")
public TaskCenterBean(){
Session session = HibernateUtil.getSessionFactory().openSession();
Criteria criteria = session.createCriteria(CRTask.class);
criteria.add(Restrictions.eq("reviewerId", ConfigOptionsBean.getCurrentUser().getUserId()));
cRTaskList = criteria.list();
session.close();
cRTaskListOptions = (SelectItem[]) createFilterOptions(cRTaskStatuses);
}
...
}
有什么想法我一直想念的嗎? 邏輯與相關primefaces演示中的邏輯相同。
這個問題與此類似: 在p:dataTable上使用過濾器時,Ajax更新不起作用
嘗試在ajax調用之后調用taskTable.filter():
<p:ajax event="filter" update="@this" oncomplete="tasksTable.filter()" />
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.