Primefaces DataTable过滤和RowSelection不起作用

如何解决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的实例。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-