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>
Managed 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>
答案 0 :(得分:0)
我假设当你点击该行时,没有数据。那是因为您正在使用请求范围的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即时行选择,您需要注意他们正在使用<p:ajax event="rowSelect" ..../>
以及辅助bean中的方法来处理此问题。
答案 1 :(得分:0)
loúnicodeque debes hacer es al bean TableBean.java quitarle(borrar)el @SessionScoped y a la clase Car.java quitarle @ManagedBean(name =“car”),@ SessionScoped,实现Serializable。 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。这个类是一个简单的类,不一定只是一个管理数据。