2012-07-30 7 views
0

Edit2 - J'ai ajouté le fichier faces-config.xml à la fin de la publication.Primefaces Sélection de ligne datable

Je rencontre des problèmes avec la sélection des lignes de Primefaces. Je veux être en mesure de sélectionner une ligne et de déplacer les données dans un objet que je peux ensuite manipuler. J'utilise un modèle basé sur l'exemple des vitrines primales, mais cela ne fonctionne pas. Franchement, je suis à court d'idées quant à ce qui ne va pas. Voici mon xhtml et 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 géré ici:

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; 
} 


} 

Merci, Dave

<?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

Vos beans gérés sont-ils déclarés dans 'faces-config.xml' ou avez-vous oublié les annotations? Nous devons voir pourquoi le bean géré ne conserve pas les données après une requête du serveur. Pourriez-vous s'il vous plaît inclure votre faces-config.xml? –

+0

Merci d'avoir répondu, je viens de l'ajouter à la fin de mon article. – Dave

+0

Je ne vois pas votre fichier faces-config.xml @Dave. – Catfish

Répondre

0

Je suppose que lorsque vous cliquez sur la ligne, il n'y a pas de données. C'est parce que vous utilisez un bean de portée de requête. Cela signifie que lorsque vous chargez la page, le bean est rempli. Une fois la page chargée, le bean est parti.

Je suggère de changer votre portée à ViewScope pour voir si cela aide du tout. En outre, si vous utilisez jsf 2.0, vous pouvez utiliser des annotations à la place du fichier faces-config.xml. Votre Backer ressemblerait à ceci:

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; 
} 


} 

Maintenant, vous pouvez retirer votre truc réussi de haricots de faces-config.xml. Je viens de me rendre compte que vous n'avez pas d'événement ajax pour gérer la sélection de ligne. Si vous regardez la sélection de lignes instantanées primaux, vous devez remarquer qu'ils utilisent <p:ajax event="rowSelect" ..../> avec une méthode dans le bean backing pour gérer cela.

+0

Merci, mais j'ai fait tout ça et toujours le même résultat. Je commence à penser que c'est quelque chose à propos de ma configuration. – Dave

+0

Mais je suis perdue si je peux comprendre quoi. – Dave

+0

Réponse mise à jour. – Catfish

0

lo único que debes hacer es al bean TableBean.java quitarle (borrar) el @SessionScoped y a la clase Car.java quitarle @ManagedBean (name = "voiture"), @SessionScoped, implémente Serializable. esta clase es una simple clase no tiene porque ser un managebean unicamente son datos.

Translated:

Tout ce que vous avez à faire est de prendre le haricot TableBean.java (supprimer) le @SessionScoped et prendre Car.java classe @ManagedBean (name = "voiture"), @SessionScoped, implémente Serializable. Cette classe est une classe simple ne doit pas être un managebean seulement sont des données.

Questions connexes