Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java primefaces datatable筛选器在后续单击中不起作用_Java_Jsf_Primefaces - Fatal编程技术网

Java primefaces datatable筛选器在后续单击中不起作用

Java primefaces datatable筛选器在后续单击中不起作用,java,jsf,primefaces,Java,Jsf,Primefaces,我有一个primefaces视图,其中我使用下拉列表筛选特定列(任务状态)。当我第一次从过滤器列表中选择一个值时,过滤器工作正常,但在随后的过滤器选择中,表不会刷新(我的视图已关闭) 以下是查看代码: <p:dataTable id="tasksDataTable" var="cRTaskData" value="#{taskCenterBean.cRTaskList}" widgetVar="tasksTable" pa

我有一个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>

...
...
下面是相关的backbean代码:

@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);
    }
    ...
}
@ManagedBean(name=“taskCenterBean”)
@视域
公共类TaskCenterBean实现可序列化{
私有最终静态字符串[]cRTaskStatuses={“打开”、“提交”、“关闭”、“冲突”};
私人名单;
私有列表crtasklistfilter;
private SelectItem[]cRTaskListOptions;
公共列表getcRTaskList(){
返回任务列表;
}
公共列表getcRTaskListFiltered(){
返回cRTaskListFiltered;
}
公共无效setcRTaskListFiltered(列表cRTaskListFiltered){
this.cRTaskListFiltered=cRTaskListFiltered;
}
public SelectItem[]getcRTaskListOptions(){
返回cRTaskListOptions;
}
private SelectItem[]createFilterOptions(字符串[]数据){
SelectItem[]选项=新建SelectItem[data.length+1];
选项[0]=新建SelectItem(“,”选择“);
对于(int i=0;i

你知道我错过了什么吗?该逻辑与相关primefaces演示中的逻辑相同。

此问题与此问题相似:

在进行ajax调用后,尝试调用tasksTable.filter():

<p:ajax event="filter" update="@this" oncomplete="tasksTable.filter()" />


CRImageData.status是字符串吗?您可以尝试将
update=“@this”
更改为
update=“@form”
?是的,它是一个字符串!没有任何运气就改成了“@form”(视图被破坏)