Primefaces DataTable 过滤和 RowSelection 不起作用
我是 PrimeFaces 的新手。我正在使用它来编写 Saas 应用程序的前端代码。我正在使用 primefaces 数据表来显示客户列表。我需要对值进行排序和过滤。当在数据表上选择一行时,我还需要填充另一个小部件。排序有效,但过滤和选择不起作用。下面是 bean 和 faces 页面的代码片段。我正在使用 PrimeFaces 2.2.1 和 JSF 2.0.2。
<html xmlns="http://www.w3c.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head></h:head>
<h:body>
<h:form>
<p:growl id="growl" showDetail="true" />
<p:layout fullPage="true">
<!-- Top Tabbed Panel -->
<p:layoutUnit position="top" id="main" width="600" resizable="false">
<center><h3>SAAS Admin Tool</h3></center>
<p:tabView effect="opacity" effectDuration="normal" collapsible="true" >
<p:tab title="Customer">
<!-- Start of customer datatable -->
<p:dataTable var="customer" value="#{customerBean.customers}" paginator="true" selection="#{customerBean.selectedCustomer}"
selectionMode="single" onRowSelectUpdate="custList" onRowSelectComplete="custTest.show()" id="custList" widgetVar="custList">
<f:facet name="header">
List of Customers
<p:outputPanel>
<p:commandButton value="+" type="button" onclick="addCustDlg.show()"/>
</p:outputPanel>
</f:facet>
<p:column sortBy="#{customer.id}" filterBy="#{customer.id}" update=":custList" headerText="ID">
<h:outputText value="#{customer.id}"/>
</p:column>
<p:column sortBy="#{customer.name}" filterBy="#{customer.name}" headerText="NAME" filterMatchMode="contains">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{customer.name}"/>
</f:facet>
<f:facet name="input">
<p:inputText value="#{customer.name}"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column sortBy="#{customer.description}" filterBy="#{customer.description}" headerText="DESCRIPTION">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{customer.description}"/>
</f:facet>
<f:facet name="input">
<p:inputText value="#{customer.description}"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column sortBy="#{customer.signupDate}" filterBy="#{customer.signupDate}" headerText="SIGN UP DATE">
<h:outputText value="#{customer.signupDate}"/>
</p:column>
<p:column sortBy="#{customer.validUntil}" filterBy="#{customer.validUntil}" headerText="EXPIRY DATE">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{customer.validUntil}"/>
</f:facet>
<f:facet name="input">
<p:inputText value="#{customer.validUntil}"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column sortBy="#{customer.status}" filterBy="#{customer.status}" headerText="STATUS">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{customer.status}"/>
</f:facet>
<f:facet name="input">
<p:inputText value="#{customer.status}"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="CREATION DATE" sortBy="#{customer.creationDate}" filterBy="#{customer.creationDate}">
<h:outputText value="#{customer.creationDate}"/>
</p:column>
<p:column headerText="LAST UPDATE DATE" sortBy="#{customer.lastUpdateDate}" filterBy="#{customer.lastUpdateDate}">
<h:outputText value="#{customer.lastUpdateDate}"/>
</p:column>
<p:column headerText="Options">
<p:rowEditor/>
</p:column>
</p:dataTable>
<!-- End of dataTable (customer datatable) -->
<!-- Customer Details Tabbed Panel-->
<p:tabView effect="opacity" effectDuration="normal" id="custTab" widgetVar="custTab">
<p:tab title="Lines">
lines info..
</p:tab>
<p:tab title="LineCards">
Linecards..
</p:tab>
</p:tabView>
<!-- END of customer details tabbed view -->
</p:tab>
<p:tab title="Deployment">
<h:panelGrid columns="2" cellpadding="10">
<h:outputText value="software"/>
</h:panelGrid>
</p:tab>
<p:tab title="Maintainence">
<h:panelGrid columns="2" cellpadding="10">
<h:outputText value="test."/>
</h:panelGrid>
</p:tab>
<p:tab title="Audit Trail">
<h:panelGrid columns="2" cellpadding="10">
<h:outputText value="Hardware Summary"/>
</h:panelGrid>
</p:tab>
</p:tabView>
</p:layoutUnit>
<!-- DIALOGs -->
<p:dialog header="Add Customer" widgetVar="addCustDlg" id="addCustDlg" resizable="false" width="420" onCloseUpdate="custList">
<h:panelGrid columns="2">
<h:outputLabel value="Name:"/>
<p:inputText value="#{customerBean.newCustomer.name}" required="true"/>
<h:outputLabel value="Description:"/>
<p:inputText value="#{customerBean.newCustomer.description}" required="true"/>
<h:outputLabel value="Sign Up Date:"/>
<p:inputMask value="#{customerBean.signDate}" mask="99/99/2099"/>
<h:outputLabel value="Expiry Date:"/>
<p:inputMask value="#{customerBean.exDate}" mask="99/99/2099"/>
<h:outputLabel value="Status:"/>
<p:inputText value="#{customerBean.newCustomer.status}" required="true"/>
<p:commandButton value="Submit" oncomplete="addCustDlg.hide();" actionListener="#{customerBean.addCustomer}" update=":custList"/>
</h:panelGrid>
</p:dialog>
<p:dialog header="customer info" widgetVar="custTest" id="custTest" closable="true">
<h:outputLabel value="Name: #{customerBean.selectedCustomer.name}"/>
</p:dialog>
<!-- Save and Reset buttons -->
<p:layoutUnit position="bottom" id="buttons" height="75">
<center>
<p:commandButton value="Save Changes" actionListener="#{customerBean.save}" update="growl"/>
<p:commandButton value="Reset" actionListener="#{customerBean.reset}" update="growl"/>
</center>
</p:layoutUnit>
</p:layout>
</h:form>
</h:body>
</html>
Bean 代码:
import java.io.Serializable;
import java.sql.Date;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import com.assia.saas.dao.AbstractSearchDAO;
import com.assia.saas.dao.EntityManagerHelper;
import com.assia.saas.entities.Customer;
@ManagedBean(name="customerBean")
@ViewScoped
public class CustomerBean implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
AbstractSearchDAO<Customer> custDao = new AbstractSearchDAO<Customer>() {
@Override
protected Class<Customer> getEntityClass() {
return Customer.class;
}
@Override
protected Customer getEntityReference(Customer entity) {
return getEntityManager().getReference(Customer.class, entity.getId());
}
};
List<Customer> customers = new ArrayList<Customer>();
private Customer selectedCustomer = new Customer();
private Customer newCustomer;
private String signDate;
private String exDate;
/**
* @return the signDate
*/
public String getSignDate() {
return signDate;
}
/**
* @param signDate the signDate to set
*/
public void setSignDate(String signDate) {
this.signDate = signDate;
}
/**
* @return the exDate
*/
public String getExDate() {
return exDate;
}
/**
* @param exDate the exDate to set
*/
public void setExDate(String exDate) {
this.exDate = exDate;
}
/**
* @return the newCustomer
*/
public Customer getNewCustomer() {
return newCustomer;
}
/**
* @param newCustomer the newCustomer to set
*/
public void setNewCustomer(Customer newCustomer) {
this.newCustomer = newCustomer;
}
public CustomerBean(){
customers = custDao.findAll(null);
newCustomer = new Customer();
}
public void save(){
//TODO: CODE METHOD
}
public void reset(){
//TODO: Code Method
}
/**
* @return the customers
*/
public List<Customer> getCustomers() {
return customers;
}
/**
* @param customers the customers to set
*/
public void setCustomers(List<Customer> customers) {
this.customers = customers;
}
/**
* @param selectedCustomer the selectedCustomer to set
*/
public void setSelectedCustomer(Customer selectedCustomer) {
this.selectedCustomer = selectedCustomer;
}
/**
* @return the selectedCustomer
*/
public Customer getSelectedCustomer() {
return selectedCustomer;
}
public void addCustomer(ActionEvent event) throws ParseException{
Date date = new Date(Calendar.getInstance().getTimeInMillis());
newCustomer.setCreationDate(date);
newCustomer.setLastUpdateDate(date);
DateFormat formatter;
formatter = new SimpleDateFormat("MM/dd/yyyy");
java.sql.Date sqlDate = new java.sql.Date(formatter.parse(signDate).getTime());
newCustomer.setSignupDate(sqlDate);
sqlDate = new java.sql.Date(formatter.parse(exDate).getTime());
newCustomer.setValidUntil(sqlDate);
EntityManagerHelper.beginTransaction();
custDao.save(newCustomer);
EntityManagerHelper.commit();
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Success", "New Customer Added"));
}
}
该代码不会填充 bean 中的“selectedCustomer”对象。
I'am new to PrimeFaces. I'am using it to code the front end of a Saas Application. I' am using a primefaces datatable to display a list of customers. I need to sort and filter the values. Also I need to populate another widget when a row is selected on the datatable. Sorting works but filtering and selection don't work. Below are the code snippets of the bean and the faces page. I'am using PrimeFaces 2.2.1 and JSF 2.0.2.
<html xmlns="http://www.w3c.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head></h:head>
<h:body>
<h:form>
<p:growl id="growl" showDetail="true" />
<p:layout fullPage="true">
<!-- Top Tabbed Panel -->
<p:layoutUnit position="top" id="main" width="600" resizable="false">
<center><h3>SAAS Admin Tool</h3></center>
<p:tabView effect="opacity" effectDuration="normal" collapsible="true" >
<p:tab title="Customer">
<!-- Start of customer datatable -->
<p:dataTable var="customer" value="#{customerBean.customers}" paginator="true" selection="#{customerBean.selectedCustomer}"
selectionMode="single" onRowSelectUpdate="custList" onRowSelectComplete="custTest.show()" id="custList" widgetVar="custList">
<f:facet name="header">
List of Customers
<p:outputPanel>
<p:commandButton value="+" type="button" onclick="addCustDlg.show()"/>
</p:outputPanel>
</f:facet>
<p:column sortBy="#{customer.id}" filterBy="#{customer.id}" update=":custList" headerText="ID">
<h:outputText value="#{customer.id}"/>
</p:column>
<p:column sortBy="#{customer.name}" filterBy="#{customer.name}" headerText="NAME" filterMatchMode="contains">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{customer.name}"/>
</f:facet>
<f:facet name="input">
<p:inputText value="#{customer.name}"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column sortBy="#{customer.description}" filterBy="#{customer.description}" headerText="DESCRIPTION">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{customer.description}"/>
</f:facet>
<f:facet name="input">
<p:inputText value="#{customer.description}"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column sortBy="#{customer.signupDate}" filterBy="#{customer.signupDate}" headerText="SIGN UP DATE">
<h:outputText value="#{customer.signupDate}"/>
</p:column>
<p:column sortBy="#{customer.validUntil}" filterBy="#{customer.validUntil}" headerText="EXPIRY DATE">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{customer.validUntil}"/>
</f:facet>
<f:facet name="input">
<p:inputText value="#{customer.validUntil}"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column sortBy="#{customer.status}" filterBy="#{customer.status}" headerText="STATUS">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{customer.status}"/>
</f:facet>
<f:facet name="input">
<p:inputText value="#{customer.status}"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="CREATION DATE" sortBy="#{customer.creationDate}" filterBy="#{customer.creationDate}">
<h:outputText value="#{customer.creationDate}"/>
</p:column>
<p:column headerText="LAST UPDATE DATE" sortBy="#{customer.lastUpdateDate}" filterBy="#{customer.lastUpdateDate}">
<h:outputText value="#{customer.lastUpdateDate}"/>
</p:column>
<p:column headerText="Options">
<p:rowEditor/>
</p:column>
</p:dataTable>
<!-- End of dataTable (customer datatable) -->
<!-- Customer Details Tabbed Panel-->
<p:tabView effect="opacity" effectDuration="normal" id="custTab" widgetVar="custTab">
<p:tab title="Lines">
lines info..
</p:tab>
<p:tab title="LineCards">
Linecards..
</p:tab>
</p:tabView>
<!-- END of customer details tabbed view -->
</p:tab>
<p:tab title="Deployment">
<h:panelGrid columns="2" cellpadding="10">
<h:outputText value="software"/>
</h:panelGrid>
</p:tab>
<p:tab title="Maintainence">
<h:panelGrid columns="2" cellpadding="10">
<h:outputText value="test."/>
</h:panelGrid>
</p:tab>
<p:tab title="Audit Trail">
<h:panelGrid columns="2" cellpadding="10">
<h:outputText value="Hardware Summary"/>
</h:panelGrid>
</p:tab>
</p:tabView>
</p:layoutUnit>
<!-- DIALOGs -->
<p:dialog header="Add Customer" widgetVar="addCustDlg" id="addCustDlg" resizable="false" width="420" onCloseUpdate="custList">
<h:panelGrid columns="2">
<h:outputLabel value="Name:"/>
<p:inputText value="#{customerBean.newCustomer.name}" required="true"/>
<h:outputLabel value="Description:"/>
<p:inputText value="#{customerBean.newCustomer.description}" required="true"/>
<h:outputLabel value="Sign Up Date:"/>
<p:inputMask value="#{customerBean.signDate}" mask="99/99/2099"/>
<h:outputLabel value="Expiry Date:"/>
<p:inputMask value="#{customerBean.exDate}" mask="99/99/2099"/>
<h:outputLabel value="Status:"/>
<p:inputText value="#{customerBean.newCustomer.status}" required="true"/>
<p:commandButton value="Submit" oncomplete="addCustDlg.hide();" actionListener="#{customerBean.addCustomer}" update=":custList"/>
</h:panelGrid>
</p:dialog>
<p:dialog header="customer info" widgetVar="custTest" id="custTest" closable="true">
<h:outputLabel value="Name: #{customerBean.selectedCustomer.name}"/>
</p:dialog>
<!-- Save and Reset buttons -->
<p:layoutUnit position="bottom" id="buttons" height="75">
<center>
<p:commandButton value="Save Changes" actionListener="#{customerBean.save}" update="growl"/>
<p:commandButton value="Reset" actionListener="#{customerBean.reset}" update="growl"/>
</center>
</p:layoutUnit>
</p:layout>
</h:form>
</h:body>
</html>
The Bean code:
import java.io.Serializable;
import java.sql.Date;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import com.assia.saas.dao.AbstractSearchDAO;
import com.assia.saas.dao.EntityManagerHelper;
import com.assia.saas.entities.Customer;
@ManagedBean(name="customerBean")
@ViewScoped
public class CustomerBean implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
AbstractSearchDAO<Customer> custDao = new AbstractSearchDAO<Customer>() {
@Override
protected Class<Customer> getEntityClass() {
return Customer.class;
}
@Override
protected Customer getEntityReference(Customer entity) {
return getEntityManager().getReference(Customer.class, entity.getId());
}
};
List<Customer> customers = new ArrayList<Customer>();
private Customer selectedCustomer = new Customer();
private Customer newCustomer;
private String signDate;
private String exDate;
/**
* @return the signDate
*/
public String getSignDate() {
return signDate;
}
/**
* @param signDate the signDate to set
*/
public void setSignDate(String signDate) {
this.signDate = signDate;
}
/**
* @return the exDate
*/
public String getExDate() {
return exDate;
}
/**
* @param exDate the exDate to set
*/
public void setExDate(String exDate) {
this.exDate = exDate;
}
/**
* @return the newCustomer
*/
public Customer getNewCustomer() {
return newCustomer;
}
/**
* @param newCustomer the newCustomer to set
*/
public void setNewCustomer(Customer newCustomer) {
this.newCustomer = newCustomer;
}
public CustomerBean(){
customers = custDao.findAll(null);
newCustomer = new Customer();
}
public void save(){
//TODO: CODE METHOD
}
public void reset(){
//TODO: Code Method
}
/**
* @return the customers
*/
public List<Customer> getCustomers() {
return customers;
}
/**
* @param customers the customers to set
*/
public void setCustomers(List<Customer> customers) {
this.customers = customers;
}
/**
* @param selectedCustomer the selectedCustomer to set
*/
public void setSelectedCustomer(Customer selectedCustomer) {
this.selectedCustomer = selectedCustomer;
}
/**
* @return the selectedCustomer
*/
public Customer getSelectedCustomer() {
return selectedCustomer;
}
public void addCustomer(ActionEvent event) throws ParseException{
Date date = new Date(Calendar.getInstance().getTimeInMillis());
newCustomer.setCreationDate(date);
newCustomer.setLastUpdateDate(date);
DateFormat formatter;
formatter = new SimpleDateFormat("MM/dd/yyyy");
java.sql.Date sqlDate = new java.sql.Date(formatter.parse(signDate).getTime());
newCustomer.setSignupDate(sqlDate);
sqlDate = new java.sql.Date(formatter.parse(exDate).getTime());
newCustomer.setValidUntil(sqlDate);
EntityManagerHelper.beginTransaction();
custDao.save(newCustomer);
EntityManagerHelper.commit();
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Success", "New Customer Added"));
}
}
The code is not populating the "selectedCustomer" object in the bean.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我从你的问题中了解到的是你想要创建一个可编辑的数据表。当您使用 dataTable 属性 SelectionMode="Single" 时,这对我来说似乎一切都合适。我不能说它出了什么问题,因为它涉及许多其他复杂性。但您可以实现相同的目标(在支持 bean 中填充 selectedCustomer)
解决方案1:
您实现了下面的侦听器
并在支持 bean 中......
解决方案 2:
这里 selectedCustomer 是 Customer 类型的实例。
What i Undestand from your question is you want create an Editable DataTable. As you are using dataTable attribute selectionMode="Single" which seems everything right for me. I cant say what went wrong with it as it involved many other complexities. But you can achieve the samething (populating selectedCustomer In Backing bean)
Solution1:
you implement Below listener
And In backing bean..........
Solution 2:
Here selectedCustomer is instance of type Customer.