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 2 Java Discussion :

Groupe de radio à partir d'une liste


Sujet :

Struts 2 Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 30
    Points : 30
    Points
    30
    Par défaut Groupe de radio à partir d'une liste
    Bonjour,

    Je coince sur un problème concernant les radio depuis un petit moment.
    Pour faire simple, j'ai un groupe de radio dans mon formulaire, que je récupère via une liste à partir de ma base de donnée.

    Le groupe de radio permet de selectionner un SocialTitle.
    Voici mes sources :

    SocialTitle.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class SocialTitle extends BaseModel {
     
    	private Integer id;
    	private String label;
    	private String name;
     
            + mapping, getters et setters sur tous les champs
    }
    Mon action qui fourni les données de base et qui sera étendues par mes autres actions :

    ClientAction.java
    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 abstract class ClientAction extends BaseAction implements Preparable {
    	private List<SocialTitle> socialTitles;
    	private User user;
     
            + getters et setters
     
    	public void prepare() throws Exception {
    		// nouveau user pour l'inscription
    		user = new User();
     
                    // liste des titres sociaux		
    		socialTitles = SocialTitleManager.getInstance().getAllOrderByName();
    	}
    }
    J'ai ensuite une action qui sert à afficher le formulaire qui étend de la précédente classe:

    InscriptionAction.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public class InscriptionAction extends ClientAction {
             public String execute { ... }
    }
    Et l'action qui traite le formulaire envoyé qui étend également de ClientAction : InscriptionSaveAction.java

    Enfin la jsp qui contient le formulaire et qui est appelée par ces 2 actions :

    client-form.jsp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	<s:form namespace="/client" action="inscription-save" method="post"
    		theme="simple" >
     
                    ....
     
    		<s:radio name="user.socialTitle"
            		list="socialTitles" listValue="name" listKey="id"/>
     
                    ....
     
                    <s:submit value="%{getText('form.register.submit')}" />
            </s:form>
    Ah et j'oubliais ma classe User contient un attribut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private SocialTitle socialTitle;
    correctement mappé avec le setter et getter.

    Toutes ces explications pour vous dire que quand je submit mon formulaire, j'ai un message d'erreur pour mon champs user.socialTitle :
    Invalid field value for field "social".

    Et le message d'erreur tiré d'Eclipse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ognl.MethodFailedException: Method "setSocialTitle" failed for object fr.lukasp.development.actions.client.InscriptionSaveAction@256b4372 [java.lang.NoSuchMethodException: setSocialTitle([Ljava.lang.String;)]
    Si je comprend bien, struts 2 ne veut pas directement setter mon objet à partir de l'id récupéré du formulaire. Mais pourtant je suis sur que ca doit se faire non ?

    Quel est mon oubli ou mon erreur ?

    Merci pour votre aide,
    Lukas

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 136
    Points : 112
    Points
    112
    Par défaut
    Salut,
    Je ne suis pas sûr à 100% de ma réponse mais tu peux essayer.
    Tes boutons radio ont pour clé "id", c'est à dire un Integer. Le formulaire HTML va donc renvoyer un entier. Struts ne va donc pas chercher une méthode set(SocialTitle) mais une méthode set(Integer) : comme il n'en trouve pas, il va chercher une méthode set(String) et là il te met une erreur car elle n'existe pas.
    Il faut donc que tu crées un attribut socialTitleId avec un setter, et que le champ de ton formulaire porte le même nom. Ensuite, c'est à ton action d'aller en base de données pour récupérer ton objet à partir du son id, elle ne peut pas récupérer directement l'objet depuis le retour du formulaire HTML...

    Après, je ne connais pas la syntaxe que tu utilises : "user.(...)". Mes champs portent toujours le nom d'un champ qui est dans l'action, et pas dans un objet contenu dans l'action. Enfin peut-être que ça existe mais je ne connais pas

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 30
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    Tu es presque dans le juste. La solution que j'utilise pour le moment est de créer un type converter pour les objets de mes boutons radio.

    Le bouton renvoit l'id en String (pas Integer), et le type converter fait ce que tu as dit, cad récupérer l'id à partir de la string et récupérer l'objet en base correspondant à l'id.

    Ceci fonctionne mais cette solution ne me satisfait pas du fait que ca multiplie inutilement les accès à la base. Je me tourne donc vers la mise en session dès que j'ai un peu de temps.

    J'avais oublié ce topic

Discussions similaires

  1. Créer des groupes de 4 à partir d'une liste
    Par Coussati dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 07/12/2011, 21h39
  2. Réponses: 32
    Dernier message: 22/09/2005, 10h40
  3. Réponses: 3
    Dernier message: 19/05/2005, 17h52
  4. Réponses: 3
    Dernier message: 25/04/2005, 15h26
  5. Trouver equation à partir d'une liste de points
    Par scarabee dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 27/05/2004, 17h05

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