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 :

Passage des champs du formulaire à l'action


Sujet :

Struts 2 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2006
    Messages : 121
    Par défaut Passage des champs du formulaire à l'action
    Bonjour,

    Je souhaite mettre en place un simple formulaire qui affiche le détail d'une entreprise, puis permettre la modification des informations et enregistrer les modifs dans ma base.

    Mon appli web a la config suivante: Java 1.6, Struts 2, Tiles 2, Hibernate, MySQL, JBoss.

    J'ai donc une JSP avec les champs et les boutons modifier/enregistrer.
    Deux actions: une pour afficher le formulaire, et une pour enregistrer les infos modifiées.
    Le bouton modification passe les champs de la JSP à readonly=false en javascript.

    J'utilise l'identifiant de l'entreprise comme paramètre pour afficher les détails.
    Il est aussi affiché dans la JSP.
    L'action showEnt m'affiche tout impec.
    Le pb, c'est que qd je clique sur Enregistrer mon formulaire, tout les champs sont rapattriés dans l'action saveEnt sauf l'ID

    Je vous donne mes bouts de code:

    Entreprise_Fiche.jsp
    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
    57
    58
    59
    60
    61
    62
     
    <%-- Corps de la fiche entreprise --%>
    <tags:form action="saveEnt" theme="simple"> 
        <div id="searchbar">
            <table>
                <tr class="even">
                    <%-- Nom de l'entreprise --%>
                    <td class="redtitle"><b><tags:text name="newent.fields.name"/>*</b></td>
                    <td class="redbox"><b><tags:textfield id="box1" cssClass="textlarge" name="nom"/></b></td>
                    <%-- Identifiant de l'entreprise --%>
                    <td class="redtitle"><b><tags:text name="rechent.fields.id"/></b></td>
                    <td class="redbox"><b><tags:property value="ident"/></b></td>
                    <tags:hidden value="id" name="id"/>
                </tr>
                <tr class="odd">
                    <%-- Adresse de l'entreprise --%>
                    <td class="title"><b><tags:text name="newent.fields.adr"/></b></td>
                    <td class="box"><tags:textfield id="box2" cssClass="textlarge" name="adresse"/></td>
                    <%-- Site web de l'entreprise --%>
                    <td class="title"><b><tags:text name="newent.fields.web"/></b></td>
                    <td class="box"><tags:textfield id="box3" cssClass="textlarge" name="web"/></td>
                </tr>
                <tr class="even">
                    <%-- Code postal de l'entreprise --%>
                    <td class="title"><b><tags:text name="newent.fields.cp"/></b></td>
                    <td class="box"><tags:textfield id="box4" cssClass="textlarge" name="cp"/></td>                                
                    <%-- Département de travail dans Airbus de l'entreprise --%>
                    <td class="title"><b><tags:text name="newent.fields.dpt"/></b></td>
                    <td class="box"><tags:textfield id="box5" cssClass="textlarge" name="dpt"/></td>  
                </tr>    
                <tr class="odd">
                    <%-- Ville de l'entreprise --%>
                    <td class="title"><b><tags:text name="newent.fields.city"/>*</b></td>
                    <td class="box"><tags:textfield id="box6" cssClass="textlarge" name="ville"/></td>
                    <%-- Type de facturation de l'entreprise --%>
                    <td class="title"><b><tags:text name="newent.fields.autofact"/>*</b></td> 
                    <td class="box"><tags:select id="select1" label="Select Month" name="autoFact" list="#{'true':'Entreprise','false':'Organisme'}"/></td>
                </tr>             
                <tr class="even">
                    <%-- Pays de l'entreprise --%>
                    <td class="title"><b><tags:text name="newent.fields.country"/>*</b></td>
                    <td class="box"><tags:textfield id="box7" cssClass="textlarge" name="pays"/></td>
                </tr>    
            </table> 
            <table>
                <tr class="odd">
                    <%-- Note sur le mode de facturation de l'entreprise --%>
                    <td class="title"><b><tags:text name="newent.fields.notefact"/></b></td>
                    <td width=85%><tags:textarea id="box8" cssClass="textarea" name="noteFact"/></td>   
                </tr>
                <tr><td>&nbsp;</td></tr>            
            </table>        
            <table width="300px">  
                <%-- Option de la feuille --%>   
                <tr class="even">
                    <td><input id="btnModif" type="button" class="modifyform" value="Modifier" onclick="javascript:undoReadOnly()"/>
                    <tags:submit id="btnSave" cssClass="savedb" value="Enregistrer" />                   
                    <td><div id="error"><tags:actionerror/></div></td>
                </tr>  
            </table>
        </div> 
    </tags:form>
    Entreprise_showAction.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
    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
     
    public class Entreprise_showAction extends ActionSupport {
     
        private String id="";
        private String ident="" ;
        private String nom="";
        private String web="";
        private String adresse="";
        private String cp="";
        private String ville="Toulouse";
        private String pays="France";
        private String dpt="";
        private boolean autoFact=true;
        private String noteFact="";
     
        public String getId() {
            return id;
        }
     
        public void setId(String id) {
            this.id = id;
        }
        /* ...Tous les set et get... */
     
        @Override public String execute() throws Exception {
            EntrepriseManager emRech = new EntrepriseManager() ;   
            try {
                /* Effacement des messages d'erreurs précédent */
                this.clearErrorsAndMessages();
                /* Récupération de l'entreprise dans la base */
                Entreprise ent = new Entreprise() ;
                ent =  emRech.entrepriseById(this.getId()) ;
                this.setIdent(Integer.toString(ent.getId()));
                this.setAdresse(ent.getAdresse());
                this.setAutoFact(ent.isAutoFact());
                this.setCp(ent.getCodePostal());
                this.setDpt(ent.getDpt());
                this.setNom(ent.getNom());
                this.setNoteFact(ent.getNoteFact());
                this.setPays(ent.getPays());
                this.setVille(ent.getVille());
                this.setWeb(ent.getWeb());
                return SUCCESS ;
            }
            catch (NumberFormatException nbrE) {
                addActionError("Erreur lors de l'affichage: l'identifiant doit etre renseigné.");
                return INPUT ;
            }
            catch (Exception e) {
                addActionError("Erreur lors de l'affichage: "+e.getMessage());
                return INPUT ;
            }
        }
    }
    Entreprise_saveAction.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
    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
     
    public class Entreprise_saveAction extends ActionSupport {
     
        private String ident="";
        private String nom="";
        private String web="";
        private String adresse="";
        private String cp="";
        private String ville="Toulouse";
        private String pays="France";
        private String dpt="";
        private boolean autoFact=true;
        private String noteFact="";
     
        public String getIdent() {
            return ident;
        }
     
        public void setIdent(String ident) {
            this.ident = ident;
        }
     
        /* ... get et set ... */
     
        @Override public String execute() throws Exception {
            try {
                this.clearErrorsAndMessages();
                /* Instanciation de l'entreprise Manager */
                EntrepriseManager emRech = new EntrepriseManager() ;
                /* Instanciation de la nouvelle entreprise */
                Entreprise ent = new Entreprise(Integer.parseInt(this.ident), this.nom, this.adresse, this.cp, this.ville, 
                        this.pays, this.web, this.dpt, this.autoFact, this.noteFact) ;
                /* Enregistrement de l'entreprise dans la base */
                emRech.updateEntreprise(ent);
                addActionError("Entreprise mise à jour avec succès.");
                return SUCCESS ;            
            }
            catch (Exception e) {
                addActionError("Erreur lors de la mise à jour: "+e.getMessage());
                return INPUT ;
            }
        } 
     
        @Override public void validate() {
            if ( (getNom()==null || getNom().trim().equals(""))||
                    (getVille()==null || getVille().trim().equals(""))||
                    (getPays()==null || getPays().trim().equals(""))) {
                addActionError("Vous devez renseigner les champs obligatoires.") ;
            }
        }
    }
    struts.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            <action name="saveEnt" class="com.formation.struts.actions.Entreprise_saveAction">
                <result name="success" type="redirect-action">
                    <param name="actionName">showEnt</param>
                    <param name="id">${id}</param>
                </result>
                <result name="input" type="tiles">site.contact.rechEntreprise</result>
            </action>
    Pensez vous qu'il y ait une erreur dans mon code?
    Ou bien un defaut d'analyse plutot, au niveau du fonctionnement de struts2.

    J'ai un peu du mal au niveau des paramètres de l'action dans struts.xml.
    Où struts va chercher ${id} ? Cela devrait correspondre à un paramètre dans mon action Entreprise_saveAction? ou dans la jsp?

    Je suis un peu perdue dans tous ces framework etc^^

    Merci d'avance si vous avez des idées.

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2006
    Messages : 121
    Par défaut
    Re bonjour,

    J'ai changé de méthode pour le passage des paramètres.
    Au lieu de passer les paramètres de mon entreprise une par une, je passe l'objet entreprise en entier entre les actions et la jsp.
    Mais visiblement, cela revient tout à fait au meme. Il me charge bien les champs de l'entreprise dans mon action save SAUF l'ID, que ce soit dans l'objet entreprise elle meme ou en paramètre seul.

    Voici le message d'erreur que me renvoie Hibernate lorsqu'il essaye de mettre à jour l'entreprise dans la base:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Erreur lors de la mise à jour: org.hibernate.StaleStateException: 
    Batch update returned unexpected row count from update [0]; 
    actual row count: 0; expected: 1
    Si je ne me trompe pas, il recherche ici à mettre à jour l'entreprise 0 qui n'existe pas?

    Si vous avez des idées, elles seront les bienvenues.

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2006
    Messages : 121
    Par défaut
    Finalement cela fonctionne.

    Je ne sais pas si c'est particulier à mon cas pour une raison X ou Y, ou si c'est une spécification dans Struts 2, mais les tag LABEL ou PROPERTY ne permettent que l'affichage de paramètres.

    J'ai résolu mon histoire en affichant mon ID dans un simple TEXTFIELD qui récupère l'info de mon action show et la repasse à mon action save.

    Si qqun pourrait m'éclairer là dessus, à savoir si c'est quelque chose de connu dans struts?

    Il est vrai que pour le tag property, la javadoc indique :
    "Print out expression which evaluates against the stack"

    Merci tout de même aux quelques uns qui se sont donnés la peine de lire mon post.

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 167
    Par défaut
    J'avais ete confronte a un probleme similaire et comme toi je passais mon id en caché et il me semble que pour ma part c'etait juste un probleme avec le value stack qui manquait, donc du coup malgre la presence des getters/setters la valeur de mon id ne circulait pas de facon implicite.

    C'est a dire qu'au lieu d'avoir ceci (qui fonctionne) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <s:hidden name="noClient" value="%{noClient}" />
    j'avais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <s:hidden name="noClient" value="noClient" />
    J'ai remarque que toi non plus tu ne le mettais pas ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <tags:hidden value="id" name="id"/>
    Ce que je dis n'a probablement rien a voir avec ton probleme car si j'ai bien compris t'arrive quand meme a le recuperer donc bon apres je sais pas

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

Discussions similaires

  1. Cacher des champs de formulaire au chargement
    Par ColonelHati dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 15/01/2007, 13h51
  2. Afficher/masquer des champs de formulaire à la demande
    Par renaud26 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 16/10/2006, 13h20
  3. Réponses: 3
    Dernier message: 03/07/2006, 22h00
  4. bloquer des champs de formulaires
    Par reventlov dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 21/03/2006, 16h33
  5. Réponses: 4
    Dernier message: 13/09/2005, 11h50

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