簡體   English   中英

primefaces數據表過濾器在后續點擊中不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM