我是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”对象。
答案 0 :(得分:3)
我想要解决的问题是你想要创建一个可编辑的数据表。当你使用dataTable属性selectionMode =“Single”时,这似乎一切都适合我。我不能说它出了什么问题,因为它涉及许多其他复杂性。但是你可以实现相同的功能(在backing bean中填充selectedCustomer)
<强>解决方法1:强> 你实现了下面的监听器
rowEditListener="#{customerBean.listenerInBackingBean}"
并在支持豆..........
public void listenerInBackingBean(org.primefaces.event.RowEditEvent ev) {
Customer selectedCustomer = (Customer) ev.getObject();
//write Logic to Store Customer in Database
}
解决方案2:
<p:commandButton >
<f:setPropertyActionListener value="#{customer}" target="#{customerBean.selectedCustomer}" />
</p:commandButton>
此处selectedCustomer是Customer类型的实例。