IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Struts 1 Java Discussion :

bean et récupération des données


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 15
    Par défaut bean et récupération des données
    Bonjour, je débute avec Struts alors peut être que c'est une question à la c** ^^ mais bon la voici:

    J'ai une classe A qui a comme paramètre une liste d'objets de classe B. (dans chacune de ces 2 classes j'ai tous mes getters/setters).

    Dans mon bean j'ai un truc du genre

    MaClasseA a;

    get/set de a;

    ----------------------
    Dans ma jsp j'arrive a afficher les valeurs des paramètres des objets B contenus dans A (avec un iterate et un html:text), mais si je modifie leur valeur dans le formulaire, ca ne les modifie pas qd je les récupère dans mon action (scope en session)

    C'est impossible a faire, je m'y prends mal? si qqun a un exemple merci.

    Et bonne nuit aussi

  2. #2
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Tu peux utiliser les tags indexés (attribut indexed="true" dans les tags html:text) ou les tags nested.

    Regarde cette discussion. Ce cas est un peu plus complexe que le tien à cause de l'imbrication mais tu as un exemple de getter et setter indexés et un exemple d'utilisation des tags nested dont tu peux t'inspirer.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 15
    Par défaut
    Merci pour ta réponse.

    J'ai essayé avec les tags nested mais je suis pas trop sûr de bien m'en servir.

    j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <nested:iterate id="monId" name="monBean" property="monObjetA.malistedeB">
    	<nested:text name="monId" property="titreDeB"/>
    </nested:iterate>
    Ca m'affiche bien les valeurs mais qd je valide j'ai une exception :
    BeanUtils.populate
    Il me dit que titreDeB n'a pas de setter (or dans ma classeB j'ai un setter setTitle(String title) )

    Donc il y a quelque chose que je dois mal faire mais je ne sais pas quoi ^^

  4. #4
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Dans ton cas, il n'est pas utile de coder l'attribut id et l'attribut name.

    Si monObjetA est la propriété de ton ActionForm, essaie plutôt ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <nested:nest property="monObjetA">
       <nested:iterate property="malistedeB">
          <nested:text property="title"/>
       </nested:iterate>
    </nested:nest>

  5. #5
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 15
    Par défaut
    Re c'est encore moi

    J'ai essayé ce que tu m'as dit mais ca ne fonctionne pas. Je te montre le code mon exemple :

    classe customer (ma classe A):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    public class Customer implements java.io.Serializable {
     
    	// Fields
     
    	private Integer id;
    	private String firstname;
    	private String lastname;
    	private Set<Book> books = new HashSet(0);
     
    	// Constructors
     
    	/** default constructor */
    	public Customer() {
    	}
     
    	/** minimal constructor */
    	public Customer(Integer id) {
    		this.id = id;
    	}
     
    	/** full constructor */
    	public Customer(Integer id, String firstname, String lastname, Integer age,
    			Set books) {
    		this.id = id;
    		this.lastname = lastname;
    		this.books = books;
    	}
     
    	// Property accessors
     
    	public Integer getId() {
    		return this.id;
    	}
     
    	public void setId(Integer id) {
    		this.id = id;
    	}
     
    	public String getLastname() {
    		return this.lastname;
    	}
     
    	public void setLastname(String lastname) {
    		this.lastname = lastname;
    	}
     
     
    	public Set getBooks() {
    		return this.books;
    	}
     
    	public void setBooks(Set books) {
    		this.books = books;
    	}
    }
    classe Book (ma classe B) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    public class Book implements java.io.Serializable {
     
    	// Fields
     
    	private Integer id;
    	private Customer customer;
    	private String title;
    	private String author;
    	private Short borrowallowed;
     
    	// Constructors
     
    	/** default constructor */
    	public Book() {
    	}
     
    	/** minimal constructor */
    	public Book(Integer id, Short borrowallowed) {
    		this.id = id;
    		this.borrowallowed = borrowallowed;
    	}
     
    	/** full constructor */
    	public Book(Integer id, Customer customer, String title, String author,
    			Short borrowallowed) {
    		this.id = id;
    		this.customer = customer;
    		this.title = title;
    	}
     
    	// Property accessors
     
    	public Integer getId() {
    		return this.id;
    	}
     
    	public void setId(Integer id) {
    		this.id = id;
    	}
     
    	public Customer getCustomer() {
    		return this.customer;
    	}
     
    	public void setCustomer(Customer customer) {
    		this.customer = customer;
    	}
     
    	public String getTitle() {
    		return this.title;
    	}
     
    	public void setTitle(String title) {
    		this.title = title;
    	}
    }
    Mon Bean :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Customer cu = null;
     
    	public Customer getCu() {
    		return cu;
    	}
     
    	public void setCu(Customer cu) {
    		this.cu = cu;
    	}
    Mon action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    	public ActionForward execute(ActionMapping am, ActionForm af, 
    			HttpServletRequest req, HttpServletResponse res) throws Exception {
     
     
    		session = HibernateUtil.currentSession();
    		MonBean m = (MonBean)af;
     
    		if(m.getCu() == null){ 
                        Customer cu = (Customer) session.get(Customer.class, 1);
                        m.setCu(cu);
                     }
    		session.close();
    		HibernateUtil.closeSession();	
    		return am.findForward("SUCCES");		
    	}
    Et le code ds mon jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <html:form action="/toto">
    		<nested:nest property="cu">
    			<nested:iterate property="books">
    				<nested:text property="title"/>
    			</nested:iterate>
    		</nested:nest>
    		<html:submit>valider</html:submit>
    </html:form>
    Donc voila j'ai essayé ce que tu m'as dit avec un exemple simple mais je galere toujours ... ^^

    J'ai droit au joli message :
    Invalid argument looking up property: "cu.books[0].title" of bean: "monReBean"
    Merci en tout cas d'avoir pris le temps de répondre.

  6. #6
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Désolée de n'avoir pas donné suite plus tôt mais j'étais partie en week-end.

    Je pense que cela ne fonctionne pas tout simplement parce qu'il n'existe pas de getter indexé sur un Set.

    Il faudrait donc remplacer le Set d'objets Book par une List ou une ArrayList d'objets Book.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/10/2007, 10h43
  2. récupération des données via une liste déroulante
    Par rahan_dave dans le forum Access
    Réponses: 1
    Dernier message: 13/10/2005, 12h27
  3. [HTML][FORMULAIRE] Probleme dans la récupération des données
    Par baddounet dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 15/08/2005, 18h51
  4. Réponses: 2
    Dernier message: 20/02/2004, 08h47
  5. Réponses: 13
    Dernier message: 20/03/2003, 08h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo