2011-06-14 66 views
1

我是PrimeFaces的新手。我使用它来编写Saas应用程序的前端。我正在使用primefaces数据表来显示客户列表。我需要对值进行排序和过滤。另外,我需要在数据表上选择一行时填充另一个小部件。排序工作,但过滤和选择不起作用。以下是bean和面页面的代码片段。我使用PrimeFaces 2.2.1和JSF 2.0.2。Primefaces DataTable过滤和RowSelection不工作

<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” 对象。

回答

3

我想从你的问题中得到什么是你想创建一个可编辑的数据表。因为你正在使用dataTable属性selectionMode =“Single”,这看起来对我来说都是正确的。我不能说它出了什么问题,因为它涉及许多其他的复杂性。但是你可以实现samething(填充selectedCustomer在支持bean)

解决方法1: 您实现下面听众

rowEditListener="#{customerBean.listenerInBackingBean}" 

并在后台bean ..........

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类型的实例。