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 :

formulaire dynamique avec struts


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Février 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 11
    Par défaut formulaire dynamique avec struts
    Bonjour,

    J'utilise struts 1 sur une plateforme websphere 6.1.

    J'ai un formulaire JSP, son but est de modifier certains attributs d'une liste d'objets donnée. Donc dans mon formulaire, j'ai un tableau html dont le nombre de lignes est variable : une ligne par objet avec un champs html:text .

    Je prépare la liste d'objets en amont, je l'envoie à la JSP ; Tout va bien, la liste est récupéré par la JSP est affiche un formulaire prérempli.

    mais quand je valide le formulaire, la class ModifierTauxMajorationForm ne récupère pas les données.
    Voici mon code :

    dans struts config.xml :
    <form-beans type="org.apache.struts.action.ActionFormBean">
    <form-bean name="ModifierTauxMajorationForm" type="package.struts.ModifierTauxMajorationForm" />

    Contenu de tauxMajorationIHM :
    package package;

    import
    [...]

    public class TauxMajorationIHM implements java.io.sarializable {
    private String codePdr;
    private String annemaj;
    private String tauxMaj;
    private String dateDebutPdr;
    private String dateFinPdr;
    [...]


    Extrait de ma JSP :

    <html:form>
    <table>
    <% int i = 0 ;%>
    <td><tr>
    <logic:iterate id="tauxMajorationIHM" name="ModifierTauxMajorationForm" property="listeTauxMajorationIHM" type="package.TauxMajorationIHM">

    <html:hidden property='<%="listeTauxMajorationIHM["+i+"].anneeMaj"%>' value="<%= tauxMajorationIHM.getAnneeMaj()%>"/>
    <html:hidden property='<%="listeTauxMajorationIHM["+i+"].codePdr"%>' value="<%= tauxMajorationIHM.getCodePdr()%>"/>
    <html:hidden property='<%="listeTauxMajorationIHM["+i+"].dateDebutPdr"%>' value="<%= tauxMajorationIHM.getDateDebutPdr()%>"/>
    <html:hidden property='<%="listeTauxMajorationIHM["+i+"].dateFinPdr"%>' value="<%= tauxMajorationIHM.getDateFinPdr()%>"/>


    A saisir : <html:text maxlength="10" size="8" property='<%="listeTauxMajorationIHM["+i+"].tauxMaj"%>' value="<%= tauxMajorationIHM.getTauxMaj()%>"/></font>
    </td></tr>
    <%i = i + 1 ;%>
    </logic:iterate>
    dans mon ActionForm :
    package package.struts;

    import java.io.Serializable;
    import java.util.Enumeration;
    import java.util.Vector;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;

    import org.apache.struts.action.ActionError;
    import org.apache.struts.action.ActionErrors;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionMapping;

    public class ModifierTauxMajorationForm extends ActionForm implements Serializable {

    private Vector mListeTauxMajorationIHM;

    public ActionErrors validate(ActionMapping aMapping, HttpServletRequest aRequest) {

    // Liste des erreurs de saisie
    ActionErrors errors = new ActionErrors();

    /* Recuperer les valeurs du formulaire */
    Enumeration enumTaux;
    TauxMajorationIHM tauxMajorationIHM = null;


    // Recuperation de la session HTTP
    HttpSession session = aRequest.getSession();


    tauxMajorationIHM = (TauxMajorationIHM) mListeTauxMajorationIHM.elementAt(0);
    anneeMaj = tauxMajorationIHM.getAnneeMaj();
    ...
    Le plantage est sur :
    tauxMajorationIHM = (TauxMajorationIHM) ListeTauxMajorationIHM.elementAt(0);

    il s'agit d'une exeception array index out of range : 0 ;
    => en fait le vecteur mListeTauxMajorationIHM envoyé de la jsp a ModifierTauxMajorationForm est vide ...

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2008
    Messages : 160
    Par défaut
    Salut,

    Pourquoi tu passes par cette méthode?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class ModifierTauxMajorationForm extends ActionForm implements Serializable {
     
    private Vector mListeTauxMajorationIHM;
     
    public ActionErrors validate(ActionMapping aMapping, HttpServletRequest aRequest) {
    le mieux ne serait-il pas d'utiliser la méthode execute?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	@Override
    	public ActionForward execute(ActionMapping mapping, ActionForm form,
    		HttpServletRequest request, HttpServletResponse response)
    	throws Exception {
    Ainsi tu as ton ActionForm avec lequel tu peux récupérer les valeurs de ton formulaire.

    Ici tu utilise directement du code java,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <html:hidden property='<%="listeTauxMajorationIHM["+i+"].anneeMaj"%>' value="<%= tauxMajorationIHM.getAnneeMaj()%>"/>
    <html:hidden property='<%="listeTauxMajorationIHM["+i+"].codePdr"%>' value="<%= tauxMajorationIHM.getCodePdr()%>"/>
    je pense que le mieux serait plutôt d'avoir recours a des EL qui te permettent d'éviter d'insérer du code java dans une jsp ( t'as un super tutos ici:http://adiguba.developpez.com/tutoriels/j2ee/jsp/el/)

  3. #3
    Membre habitué
    Inscrit en
    Février 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 11
    Par défaut
    salut, merci pour la réponse.

    Salut,

    Pourquoi tu passes par cette méthode?

    Code :

    public class ModifierTauxMajorationForm extends ActionForm implements Serializable {

    private Vector mListeTauxMajorationIHM;

    public ActionErrors validate(ActionMapping aMapping, HttpServletRequest aRequest) {

    le mieux ne serait-il pas d'utiliser la méthode execute?

    Code :

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response)
    throws Exception {
    Ainsi tu as ton ActionForm avec lequel tu peux récupérer les valeurs de ton formulaire.
    En fait j'utilise Validate() pour valider mon Formulaire struts : je fais quelques tests sur les données qui sont saisies.

    Après validate, j'utilise pour faire mon traitement :

    public class ModifierTauxMajorationAction extends Action {

    public ActionForward perform(ActionMapping aMapping, ActionForm aForm, HttpServletRequest aRequest, HttpServletResponse aResponse)
    {

    String action = "action_suivante";
    ActionErrors errors = new ActionErrors();

    ModifierTauxMajorationForm modifierTauxMajForm = (ModifierTauxMajorationForm) aForm;
    Vector listeTauxMajorationIHM ;

    try {

    listeTauxMajorationIHM = ModifierTauxMajorationForm.getListeTauxMajorationIHM();
    //traitement java pour mettre à jour la base de données avec les valeurs de tabTauxMajorationIHM

    }
    catch (Exception e)
    { errors.add("appelerConsulterTauxMaj", new ActionError("error.chargement.listeTauxMajoration")); }
    saveErrors(aRequest, errors);
    ActionForward af = aMapping.findForward(action);
    String pagePhys = af.getPath();
    return af;
    }
    A titre de test, j'ai vidé la validate() pour aller directment dans cette methode Perform ; Là aussi je récupère pas mes données.
    En fait le gros du problème est que j'arrive pas à avoir après saisie sur la JSP un objet form contenant un vector listeTauxMajorationIHM non vide.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2008
    Messages : 160
    Par défaut
    Salut,

    Il me semble que l'ActionForward doit être la surcharge de la méthode execute ( d'ou le overide). ensuite, c'est normal que tu ne récupère pas tes valeurs car tu transforme l'ActionForm en (ModifierTauxMajorationForm)

    Voila comment je récupère mes valeurs si par exemple j'ai dans un formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <html:text name="eleveForm" property="nom" />
    Et dans la methode execute:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    		DynaActionForm dynaform = (DynaActionForm) form;
    		String nomEleve=  dynaform.getString("nom"); //Dans le cas d'une chaine.

  5. #5
    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
    Il suffit de mettre le scope de ModifierTauxMajorationForm à session dans le mapping des Actions liées à ce formulaire.

  6. #6
    Membre habitué
    Inscrit en
    Février 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 11
    Par défaut
    merci pour vos réponses. Je suis désolé, j'ai oublié quelques précisions :

    -> j'ai d'autres champs , de simples String ou int dans le formulaire, qui eux passent sans problèmes dans l'actionForm. Le problème concerne juste le vecteur mListeTauxMajorationIHM.

    ->en fait je suis en fait en train de réaliser une migration de websphere 4 à websphere 6 ; l'appli est un existant, le code que j'ai posté fonctionnait bien sur W4 et c'est depuis la migration sur Websphere que j'ai des soucis avec le vecteur. je me demande si ca n'est pas lié a une montée de version de struts, ou quelque chose dans ce gout-là ....

    j'ai essayé de mettre "scope=session" sur mon form, mais là je ne récupère plus aucune donnée ...

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

Discussions similaires

  1. include dynamique avec struts
    Par LeXo dans le forum Struts 1
    Réponses: 2
    Dernier message: 26/10/2007, 11h11
  2. formulaire dynamique avec Label For
    Par stardeus dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/05/2007, 13h39
  3. Utilisation des formulaires dynamiques avec struts
    Par nabdelghafour dans le forum Struts 1
    Réponses: 1
    Dernier message: 30/03/2007, 11h58
  4. Réponses: 13
    Dernier message: 08/02/2007, 17h05
  5. Formulaire Dynamique Avec Struts
    Par tarakakik dans le forum Struts 1
    Réponses: 1
    Dernier message: 24/08/2006, 13h22

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