2014-02-07 71 views
1

我有一个orderBy工作,但我的FilterBy什么都不做。症状:没有消息,并且所有行仍显示出来。列过滤器和全局过滤器都不起作用。有时在过滤器框中键入将导致表按其原始顺序(刷新页面后)重新加载。Primefaces 4.0 datatable过滤器不过滤数据

该项目使用JPA 2.0,EJB 3.0,PrimeFaces 4.0,Facelets。我的UserDAO扩展了一个抽象的DAOService。

任何帮助将不胜感激。

我查看了Primefaces 4.0文档和Primefaces网站的DataTable filterBy示例;我也搜索过StackOverflow和谷歌。我无法弄清楚我出错的地方。

XHTML页面:

<!-- Define Facelet Template --> 
<ui:composition template="/WEB-INF/templates/template.xhtml"> 

<!-- Header defined in template --> 

<!-- Body overrides template --> 
<ui:define name="content"> 
    <f:view> 
     <h:body> 
      <h:outputStylesheet name="css/styles.css" /> 
      <p:dataTable id="dataTable" widgetVar="usersTable" var="user" 
       value="#{users.all}" emptyMessage="none found" 
       filteredValue="#{users.filteredUsers}" editable="true" 
       editMode="cell" rowKey="user.id"> 
       <f:facet name="header"> 
        <p:outputPanel> 
         <h:outputText value="Search all fields:" /> 
         <p:inputText id="globalFilter" onkeyup="usersTable.filter()" 
          style="width:150px" /> 
        </p:outputPanel> 
        <!-- <h:outputText>Users</h:outputText> --> 
       </f:facet> 
       <p:column id="idColumn" headerText="ID" sortBy="id" 
        filterBy="#{user.id}"> 
Edit: I have also tried filterBy="id" to no avail. 
         <h:outputText value="#{user.id}" /> 
       </p:column> 
       ... more columns like that ... 
       <f:facet name="footer">This is a footer</f:facet> 
      </p:dataTable> 
     </h:body> 
    </f:view> 
</ui:define> 
<!-- Footer defined in template --> 
</ui:composition> 

UserController.java:

import java.io.Serializable; 
import java.util.List; 
import javax.annotation.PostConstruct; 
import javax.ejb.EJB; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.SessionScoped; 
import model.security.dao.UserDAORemote; 
import model.security.jpa.TSEC_User; 

//Accessible to jsf page as "users" 
@ManagedBean(name="users") 
@SessionScoped 
public class UserController implements Serializable { 
private static final long serialVersionUID = 1L; 

@EJB // // Injects the UserDAO session bean using the @EJB annotation 
UserDAORemote model; 

private List<TSEC_User> all; 
private List<TSEC_User> filteredUsers; 

public UserController() {} 

@PostConstruct 
public void init() { 
    all = model.find(); 
} 
public List<TSEC_User> getAll() { 
    return all; 
} 
public void setAll(List<TSEC_User> all) { 
    this.all = all; 
} 

public List<TSEC_User> getFilteredUsers() { 
    return filteredUsers; 
} 
public void setFilteredUsers(List<TSEC_User> filteredUsers) { 
    this.filteredUsers = filteredUsers; 
} 
} 
+1

找到了答案,但我没有足够的信誉来回答我的问题。我的template.xhtml文件使用和标签代替标签。将它们更改为其JSF等价物允许PrimeFaces过滤我的DataTable。 – brs5tettba

回答

1
My template.xhtml file used <head> and <body> tags instead of 
<h:head> and <h:body> tags. Changing these to their JSF 
equivalents allowed PrimeFaces to filter my DataTable.