Primefaces 4.0 datatable Filterby不过滤数据

时间:2014-02-07 20:27:47

标签: jsf primefaces datatable

我有一个订单可以工作,但我的FilterBy什么也没做。症状:没有消息,所有行仍然显示。列的过滤器和全局过滤器都不起作用。有时在过滤器框中键入会导致表以原始顺序重新加载(在页面刷新之后)。

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

非常感谢任何帮助。

我查看过Primefaces 4.0文档,以及Primefaces网站的DataTable过滤器示例;我也搜索过StackOverflow和google。我无法弄清楚我哪里出错了。

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 个答案:

答案 0 :(得分:1)

我的template.xhtml文件使用了<head><body>标记,而不是<h:head><h:body>标记。将这些改为JSF等价物允许PrimeFaces过滤我的DataTable。