我有一个订单可以工作,但我的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;
}
}
答案 0 :(得分:1)
我的template.xhtml文件使用了<head>
和<body>
标记,而不是<h:head>
和<h:body>
标记。将这些改为JSF等价物允许PrimeFaces过滤我的DataTable。