原始数据过滤器不起作用 [英] Primefaces datatable filter doesn't work

查看:167
本文介绍了原始数据过滤器不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须从根本上做错事,我用数据表将代码删除到最低限度,并启用一个列过滤器和全球过滤器。



有趣的是事实是,来自Primefaces的示例代码可以工作。我的代码唯一的不同之处在于,它从数据库中收集数据,而不是在bean中生成数据。



我没有更多的线索为什么我的示例不会当我在过滤器中输入内容时,任何事情都会感谢这里的任何想法。



我的xhtml:

 <!DOCTYPE html> 
< html xmlns =http://www.w3c.org/1999/xhtml
xmlns:h =http://java.sun.com/jsf/html
xmlns:ui =http://java.sun.com/jsf/facelets
xmlns:f =http://java.sun.com/jsf/core
xmlns:p =http://primefaces.org/ui>

< ui:composition template =layout.xhtml>

< ui:define name =title>所有项目< / ui:define>

< ui:define name =content>


< p:dataTable var =projectvalue =#{projectController.allProjects}widgetVar =projectTablefilteredValue =#{projectController.filteredProjects}>

< f:facet name =header>
< p:outputPanel>
< h:outputText value =搜索所有字段:/>
< p:inputText id =globalFilteronkeyup =PF('projectTable')。filter()style =width:150px/>
< / p:outputPanel>
< / f:facet>

< p:column headerText =NamefilterBy =#{project.name}>
< h:outputText value =#{project.name}/>
< / p:column>

< p:column headerText =Priority>
< h:outputText value =#{project.priority}/>
< / p:column>

< p:column headerText =退出>
< h:outputText value =#{project.exitCriteria}/>
< / p:column>

< / p:dataTable>

< / ui:define>
< / ui:composition>



我的Bean:

  package com.apa.projectd.common; 
import java.io.Serializable;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.enterprise.context.SessionScoped;
import javax.faces.bean.ManagedBean;
import javax.inject.Inject;
import com.habony.common.Loggable;
import com.habony.projectd.ejbs.ProjectEJB;
import com.habony.projectd.enteties.Project;

@ManagedBean(name =projectController)
@SessionScoped
@Loggable
public class ProjectController implements Serializable {

private static final long serialVersionUID = 8345760187637787728L;

@Inject
private ProjectEJB projectEJB;

私人列表<项目>过滤的项目;
private List< Project>所有项目

@PostConstruct
public void loadAllProjects(){
allProjects = projectEJB.getAllProjects();
}

//
// Getters和Setters
//
public List< Project> getFilteredProjects(){
return filteredProjects;
}

public void setFilteredProjects(List< Project> filteredProjects){
this.filteredProjects = filteredProjects;
}

public void setAllProjects(List< Project> allProjects){
this.allProjects = allProjects;
}

public List< Project> getAllProjects(){
return allProjects;
}

}

解决方案

p:dataTable的过滤器功能需要包装在< h:form> 标签中才能正常工作。修改的代码xhtml将:

 <!DOCTYPE html> 
< html xmlns =http://www.w3c.org/1999/xhtml
xmlns:h =http://java.sun.com/jsf/html
xmlns:ui =http://java.sun.com/jsf/facelets
xmlns:f =http://java.sun.com/jsf/core
xmlns:p =http://primefaces.org/ui>

< ui:composition template =layout.xhtml>

< ui:define name =title>所有项目< / ui:define>

< ui:define name =content>
< h:form>
< p:dataTable var =projectvalue =#{projectController.allProjects}widgetVar =projectTablefilteredValue =#{projectController.filteredProjects}>

< f:facet name =header>
< p:outputPanel>
< h:outputText value =搜索所有字段:/>
< p:inputText id =globalFilteronkeyup =PF('projectTable')。filter()style =width:150px/>
< / p:outputPanel>
< / f:facet>

< p:column headerText =NamefilterBy =#{project.name}>
< h:outputText value =#{project.name}/>
< / p:column>

< p:column headerText =Priority>
< h:outputText value =#{project.priority}/>
< / p:column>

< p:column headerText =退出>
< h:outputText value =#{project.exitCriteria}/>
< / p:column>

< / p:dataTable>
< / h:form>
< / ui:define>
< / ui:composition>


I must do something fundamentally wrong, I stripped down the code to the bare minimum with a data table and enabling one column filter and a globe filter.

The funny thing is that the example code from Primefaces works. The only difference to my code should be that it gathers data from a DB rather than generating it in the bean.

I have no more clues why my example doesn't do anything when I type something in the filter would be appreciate any ideas here.

My xhtml:

    <!DOCTYPE html>
<html xmlns="http://www.w3c.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui">

<ui:composition template="layout.xhtml">

    <ui:define name="title">All Projects</ui:define>    

    <ui:define name="content">


        <p:dataTable var="project" value="#{projectController.allProjects}" widgetVar="projectTable" filteredValue="#{projectController.filteredProjects}">

            <f:facet name="header">
                <p:outputPanel>  
                    <h:outputText value="Search all fields:" />  
                    <p:inputText id="globalFilter" onkeyup="PF('projectTable').filter()" style="width:150px" />  
                </p:outputPanel>
            </f:facet>

            <p:column headerText="Name" filterBy="#{project.name}">
                <h:outputText value="#{project.name}" />
            </p:column>

            <p:column headerText="Priority">
                <h:outputText value="#{project.priority}" />
            </p:column>

            <p:column headerText="Exit">
                <h:outputText value="#{project.exitCriteria}" />
            </p:column>

        </p:dataTable>      

    </ui:define>
</ui:composition>

My Bean:

    package com.apa.projectd.common;
    import java.io.Serializable;
    import java.util.List;
    import javax.annotation.PostConstruct;
    import javax.enterprise.context.SessionScoped;
    import javax.faces.bean.ManagedBean;
    import javax.inject.Inject;
    import com.habony.common.Loggable;
    import com.habony.projectd.ejbs.ProjectEJB;
    import com.habony.projectd.enteties.Project;

    @ManagedBean(name="projectController")
    @SessionScoped
    @Loggable
    public class ProjectController implements Serializable{

private static final long serialVersionUID = 8345760187637787728L;

@Inject
private ProjectEJB projectEJB;

private List<Project> filteredProjects;
private List<Project> allProjects;

@PostConstruct
public void loadAllProjects(){
    allProjects =  projectEJB.getAllProjects();
}

//
// Getters and Setters
//
public List<Project> getFilteredProjects() {
    return filteredProjects;
}

public void setFilteredProjects(List<Project> filteredProjects) {
    this.filteredProjects = filteredProjects;
}

public void setAllProjects(List<Project> allProjects) {
    this.allProjects = allProjects;
}

public List<Project> getAllProjects(){
    return allProjects;
}

}

解决方案

The filters features of p:dataTable need to be wrapped in <h:form> tags for work fine. The code xhtml modified would:

<!DOCTYPE html>
<html xmlns="http://www.w3c.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui">

<ui:composition template="layout.xhtml">

    <ui:define name="title">All Projects</ui:define>    

    <ui:define name="content">
       <h:form>
           <p:dataTable var="project" value="#{projectController.allProjects}" widgetVar="projectTable" filteredValue="#{projectController.filteredProjects}">

              <f:facet name="header">
                <p:outputPanel>  
                    <h:outputText value="Search all fields:" />  
                    <p:inputText id="globalFilter" onkeyup="PF('projectTable').filter()" style="width:150px" />  
                 </p:outputPanel>
              </f:facet>

              <p:column headerText="Name" filterBy="#{project.name}">
                 <h:outputText value="#{project.name}" />
              </p:column>

              <p:column headerText="Priority">
                 <h:outputText value="#{project.priority}" />
              </p:column>

             <p:column headerText="Exit">
                 <h:outputText value="#{project.exitCriteria}" />
             </p:column>

          </p:dataTable>      
      </h:form>
   </ui:define>
</ui:composition>

这篇关于原始数据过滤器不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆