【问题标题】:Primefaces Datatable row selectionPrimefaces 数据表行选择
【发布时间】:2012-07-30 16:32:31
【问题描述】:

Edit2 - 我在帖子末尾添加了 faces-config.xml。

我在使用 Primefaces 数据表行选择时遇到问题。我希望能够选择一行并将数据移动到我可以操作的对象中。我正在使用基于 primefaces 展示示例的模型,但它不起作用。坦率地说,我对出了什么问题已经没有想法了。下面是我的 xhtml 和 managedbean。

<html xmlns="http://www.w3c.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui" >
<h:head>

</h:head>
<h:body>
<center>
<h:form id="form">

<p:dataTable id="personTable" var="client" value="#{tableBean.persons}" rowKey="#{client.name}"
             selection="#{tableBean.person}" selectionMode="single">

    <f:facet name="header">
        Click "View" button after selecting a row to see details
    </f:facet>

    <p:column headerText="Name">
        #{client.name}
    </p:column>

    <p:column headerText="Address">
        #{client.address}
    </p:column>

    <p:column headerText="Phone" >
        #{client.phone}
    </p:column>
</p:dataTable>

<h:panelGrid id="display" columns="2" cellpadding="4">


        <h:outputText value="Name:" />
        <h:outputText value="#{tableBean.person.name}" />

        <h:outputText value="Address:" />
        <h:outputText value="#{tableBean.person.address}" />

        <h:outputText value="Phone:" />
        <h:outputText value="#{tableBean.person.phone}" />

</h:panelGrid>

</h:form>

</center>
</h:body>
</html>

这里是托管 Bean:

package com.dave.test;

import java.util.ArrayList;
import java.util.List;

public class TableBean {

private List<Person> persons = null;
private Person person;

public TableBean() {
    persons = new ArrayList<Person>();
    persons.add(new Person("Jimmy", "18 Maple", "337-278-1019"));
    persons.add(new Person("Sally", "47 Oak", "787-509-3819"));
    persons.add(new Person("Roger", "754 Fifth Ave.", "926-420-8219"));
    persons.add(new Person("Mimi", "891 2nd St.", "713-371-8632"));

}

public List<Person> getPersons() {
    return persons;
}

public void setPersons(List<Person> persons) {
    this.persons = persons;
}

public Person getPerson() {
    return person;
}

public void setPerson(Person person) {
    this.person = person;
}


}

谢谢,戴夫

<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="2.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xi="http://www.w3.org/2001/XInclude"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-    
 facesconfig_2_0.xsd">
 <managed-bean>
   <managed-bean-name>tableBean</managed-bean-name>
   <managed-bean-class>com.dave.test.TableBean</managed-bean-class>
   <managed-bean-scope>request</managed-bean-scope>
 </managed-bean>
</faces-config>

【问题讨论】:

  • 您的托管 bean 是在 faces-config.xml 中声明的,还是您忘记了注释?我们需要了解为什么托管 bean 在服务器请求后不保留数据。能否请您包含您的 faces-config.xml?
  • 感谢您的回复,我刚刚在帖子末尾添加了它。
  • 我没有看到你的 faces-config.xml 文件@Dave。
  • 跑题了,但你知道&lt;center&gt;&lt;/center&gt; 标签已被弃用,对吧?
  • 好的,它现在在里面(不知何故第一次迷路了)。至于中心,是的,但这只是 Primefaces 的测试程序。等我把这个问题放在心上,我会想起来的。

标签: jsf jsf-2 primefaces


【解决方案1】:

我假设当您单击该行时,没有数据。那是因为您使用的是请求范围的 bean。这意味着当您加载页面时,会填充 bean。页面加载后,bean就消失了。

我建议将您的范围更改为 ViewScope,看看是否有帮助。

另外,如果您使用的是 jsf 2.0,则可以使用注解代替 faces-config.xml 文件。您的支持者将如下所示:

package com.dave.test;

import java.util.ArrayList;
import java.util.List;

public class TableBean {

private List<Person> persons = null;
private Person person;

@ManagedBean
@ViewScoped
public TableBean() {
    persons = new ArrayList<Person>();
    persons.add(new Person("Jimmy", "18 Maple", "337-278-1019"));
    persons.add(new Person("Sally", "47 Oak", "787-509-3819"));
    persons.add(new Person("Roger", "754 Fifth Ave.", "926-420-8219"));
    persons.add(new Person("Mimi", "891 2nd St.", "713-371-8632"));

}

public List<Person> getPersons() {
    return persons;
}

public void setPersons(List<Person> persons) {
    this.persons = persons;
}

public Person getPerson() {
    return person;
}

public void setPerson(Person person) {
    this.person = person;
}


}

现在您可以从 faces-config.xml 中删除您的托管 bean 内容。

编辑 我刚刚意识到您没有 ajax 事件来处理行选择。如果您正在查看 primefaces 即时行选择,您需要注意它们使用 &lt;p:ajax event="rowSelect" ..../&gt; 以及支持 bean 中的方法来处理此问题。

【讨论】:

  • 谢谢,但我做了所有这些,结果还是一样。我开始认为这与我的配置有关。
  • 但如果我能弄清楚是什么,我就该死。
  • 谢谢,我终于也注意到了。现在我遇到了一个新问题。此外,我的问题之一是我使用 IE9 进行测试 - 错误。使用其他任何东西,兼容性问题很大
  • @Catfish 你能帮我解决这个问题吗? stackoverflow.com/questions/30054708/…
【解决方案2】:

lo único que debes hacer es al bean TableBean.java quitarle(borrar) el @SessionScoped y a la case Car.java quitarle @ManagedBean(name = "car") , @SessionScoped 实现可序列化。 esta clase es una simple clase no tiene porque ser un managebean unicamente son datos。

翻译:

你所要做的就是取TableBean.java bean(删除)@SessionScoped 并取Car.java 类@ManagedBean(name = "car"),@SessionScoped,实现Serializable。这个类是一个简单的类,不必是managebean,只是数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-24
    • 2015-07-10
    • 2013-05-31
    • 1970-01-01
    • 2012-09-08
    • 2014-03-19
    • 2012-11-09
    • 2015-07-06
    相关资源
    最近更新 更多