Primefaces DataTable过滤和RowSelection无法正常工作 [英] Primefaces DataTable filtering and RowSelection not working

查看:87
本文介绍了Primefaces DataTable过滤和RowSelection无法正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是PrimeFaces的新手.我正在用它来编码Saas应用程序的前端.我正在使用primefaces数据表来显示客户列表.我需要对值进行排序和过滤.当在数据表上选择一行时,我还需要填充另一个小部件.排序有效,但过滤和选择无效.以下是Bean和Faces页面的代码片段.我正在使用PrimeFaces 2.2.1和JSF 2.0.2.

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>

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"对象.

The code is not populating the "selectedCustomer" object in the bean.

推荐答案

我无法理解的问题是您想创建一个可编辑的数据表.当您使用dataTable属性selectionMode ="Single"时,这似乎很适合我.我不能说它出了什么问题,因为它涉及许多其他复杂性.但是您可以实现相同的目标(在Backing bean中填充selectedCustomer)

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)

解决方案1: 您实现了以下侦听器

Solution1: you implement Below listener

 rowEditListener="#{customerBean.listenerInBackingBean}"

然后在支持bean中..........

And In backing 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的实例.

Here selectedCustomer is instance of type Customer.

这篇关于Primefaces DataTable过滤和RowSelection无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆