2012-07-30 169 views
0

Edit2 - 我在文章結尾添加了faces-config.xml。Primefaces數據錶行選擇

我遇到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

您的託管bean是在'faces-config.xml'中聲明的還是您忘記了註釋?我們需要明白爲什麼託管bean在服務器請求後沒有保留數據。你能否包括你的faces-config.xml? – 2012-07-30 19:30:42

+0

感謝您的回覆,我在文章結尾處添加了它。 – Dave 2012-07-30 20:41:18

+0

我沒有看到你的faces-config.xml文件@Dave。 – Catfish 2012-07-30 21:07:53

回答

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" ..../>以及backing bean中的方法來處理此問題。

+0

謝謝,但我做了這一切,仍然是相同的結果。我開始認爲這是關於我的配置。 – Dave 2012-07-31 15:18:59

+0

但是,如果我能弄清楚什麼的話,我會感到厭煩。 – Dave 2012-07-31 15:26:47

+0

更新的答案。 – Catfish 2012-07-31 18:52:08

0

LO UNICO闕debes hacer ES人豆TableBean.java quitarle(borrar)EL @SessionScoped Y A LA化酶Car.java quitarle @ManagedBean(名稱= 「汽車」),@SessionScoped,實現Serializable。 esta clase es una simple clase no tiene porque ser un managebean unicamente son datos。

翻譯:

所有你需要做的是採取TableBean.java豆(刪除)@SessionScoped並採取Car.java類@ManagedBean(name = 「車」),@SessionScoped,實現Serializable。這個類是一個簡單的類,不必是一個管理bean,只有數據。