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 :

[STRUTS] Liste de champs de saisie


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Resyek
    Inscrit en
    Juillet 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 97
    Par défaut [STRUTS] Liste de champs de saisie
    Bonjour à tous.
    Je cherche à permettre aux utilisateurs de saisir une liste d'informations sur une page JSP. Par exemple, il pourrait entrer une liste de cartes bancaires pour un utilisateur, et chaque ligne contiendrait le numéro de carte, la date d'expiration et le type (CB/Visa/Mastercard).
    Je voudrais éviter d'avoir une structure type "matrice", où j'identifierai chaque champ "property" par un code "ligne/colonne", dans mon ActionForm. (cf ex. ci dessous).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ligne 1   |  [champx01y01][champx02y01][champx03y01]
    ligne 2   |  [champx01y02][champx02y02][champx03y02]
    ligne 3   |  [champx01y03][champx02y03][champx03y03]
    J'aurai aimé un système de gestion de Bean plus ergonomique. (Chaque ligne serait détectée comme un Bean, et je gérerai un arrayList de bean dès la saisie). Est-ce que quelqu'un a déjà eu cette problématique de liste de champs de saisie, et aurait des conseils/sites internet à me donner ?

    Je tourne sur Websphere en EJB 2.0.

  2. #2
    zl
    zl est déconnecté
    Membre éprouvé
    Inscrit en
    Août 2005
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 75
    Par défaut
    Tu peux effectivement mettre en place un bean dans lequel tu stocke toutes les infos que tu veux afficher dans ta JSP.

    C'est tout simplement une class Java qui implémente l'Interface Serializable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class CardBean implements Serializable{
     private String cardNumber;
     private String cardType;
     // etc
    }
    Dans ta JSP, utilises Struts. Rgardes particulièrement le fonctionnement du tag <html:iterate>.

    Tu pourra grâce à ce tag itérer sur une list contenant les object CardBean qui representent toutes tes cartes.

    Zl.

  3. #3
    Membre confirmé Avatar de Resyek
    Inscrit en
    Juillet 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 97
    Par défaut
    Oui, je connais la combine, ça marche parfaitement en cas d'affichage de liste. (J'utilise le tag <c:forEach /> à la place, mais le résultat est le même).

    Seulement, ce que je ne sais pas faire, c'est "saisir" une liste (avec des champs <html:input/>). C'est à dire pouvoir permettre la saisie d'une liste d'objets (possédant plusieurs champs), sans débrancher vers une autre page, et sans déclarer dans mon ActionForm des variables du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    String element1_ligne1 = null;
    String element2_ligne1 = null;
    String element3_ligne1 = null;
    String element1_ligne2 = null;
    String element2_ligne2 = null;
    String element3_ligne2 = null;
    ...
    J'ai essayé ceci :
    Action Form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class ClientDetailBean implements Serializable {
                    ... 
    	ArrayList listeSupports = null;
                    ....
                    [Constructeurs]
    }
    StrutsAction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList listeSupports = new ArrayList(10);
    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
    <c:forEach var="support"  items="${listeSupports}">
     
    <TABLE class="donneesDetail">
    <TR class="ligneDetail">
    <TD class="libelleDetail"><fmt:message>numCarte</fmt:message></TD>
    <TD class="saisieDetail">
    <html:text property="${support.numCarte}" maxlength="10" disabled="true"/></TD>
    </TR>
    <TR class="ligneDetail">
    <TD class="libelleDetail"><fmt:message>dateFinValidite</fmt:message></TD>
    <TD class="saisieDetail">
    <html:text property="${support.dateFinValidite}" maxlength="10" disabled="true"/></TD>
    </TR>
    </TABLE>
    </c:forEach>
    Mais cela ne fonctionne pas (la liste est vide). Si j'ajoute des Beans "supports" à mon ArrayList, alors il me remplace (de façon logique) mes champs property par les valeurs correspondantes du Bean.
    Une idée ?

  4. #4
    Membre confirmé Avatar de Resyek
    Inscrit en
    Juillet 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 97
    Par défaut
    Je me réponds à moi même...
    Beaucoup de tutoriaux expliquent la procédure pour <nested/> ou <logic:iterate/>, mais rien n'était sur <c:forEach>.

    Je poste ici ma solution pour dépanner ceux qui en auraient besoin.

    Dans ClientDetailForm (ActionForm) [La spécificité réside dans l'écritude d'une méthode Get et Set d'un bean dans cette liste] :
    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
    //Import de la classe contenue dans l'array list
    import package.bean.SupportBean;
     
    //Déclaration de l'ArrayList de bean
    private ArrayList listeSupports = new ArrayList();
     
    //Méthodes get et set de la liste
    public void setListeSupports(ArrayList list) {listeSupports = list;}
    public ArrayList getListeSupports() {return listeSupports;}
     
    //Méthode get et set d'un Bean dans cette liste [Non généré automatiquement]
    public SupportBean getSupport(int i) { 
                    return (SupportBean) listeSupports.get(i); 
    } 
    public void setSupport(int i,SupportBean support) { 
    	listeSupports.set(i,support); 
    }
    Description du Bean Support [Pour nommer correctement les property des <html:text> dans le formulaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String numCarte = null;
    String dateFinValidite = null;
    Dans la JSP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <c:forEach var="support" items="${clientDetail.listeSupports}" varStatus="status">
    <html:text property="support[${status.index}].numCarte" tabindex="true" name="numCarte" value="${support.numCarte}"/>
     
    <html:text property="support[${status.index}].dateFinValidite" tabindex="true" name="dateFinValidite" value="${support.dateFinValidite}"/>
     
    </c:forEach>
    Dans le strutsConfig : Rien de notable
    Dans l'action (ClientDetailAction) : rien de notable. Il suffit de peupler une ArrayList avec les beans qui vont bien pour que la JSP affiche correctement la liste de Beans.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/02/2014, 19h49
  2. champ de saisie liste deroulante
    Par bjo393 dans le forum Langage
    Réponses: 7
    Dernier message: 02/05/2013, 16h53
  3. Réponses: 2
    Dernier message: 09/06/2009, 09h28
  4. Liste déroulante avec champ de saisie
    Par midotoon dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/03/2009, 17h46
  5. Réponses: 18
    Dernier message: 09/11/2006, 17h28

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