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 \”对象。     
已邀请:
        我无法理解的问题是您想创建一个可编辑的数据表。当您使用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的实例。     

要回复问题请先登录注册