Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Java] Problème avec tag select Struts 2

    28 février 2021 à 18:59:42

    Bonjour, je suis en train de coder un formulare avec nom, prenom, biographie et la position en struts 2 et nom, prenom, biographie sont des textfield, mais position est un champ select où je dois selectionner la position parmi celles contenues dans une methode de la facade qui est de type Collection<String>, mais je n'arrive pas à ajouter cette Collection à l'attribut list de la balise tag select et il m'affiche toujours l'erreur:
    tag 'select', field 'list', name 'positions': The requested list key 'positions' could not be resolved as a collection/array/map/enumeration/iterator type
    Voici la classe ActionAffichage:

    public class ActionAffichage extends ActionSupport implements ApplicationAware {
        private FacadeJoueur facade;
        private String position;
        private Collection<String> positions;
        private String nom;
        private String prenom;
        private String biographie;
        private int id;
     
        public int getId() {
            return id;
        }
     
        public void setId(int id) {
            this.id = id;
        }
     
        public Collection<String> getPositions() {
            return facade.getAllPositions();
        }
     
        public String getPosition() {
            return position;
        }
     
        public void setPosition(String position) {
            this.position = position;
        }
     
        public String getNom() {
            return nom;
        }
     
        public void setNom(String nom) {
            this.nom = nom;
        }
     
        public String getPrenom() {
            return prenom;
        }
     
        public void setPrenom(String prenom) {
            this.prenom = prenom;
        }
     
        public String getBiographie() {
            return biographie;
        }
     
        public void setBiographie(String biographie) {
            this.biographie = biographie;
        }
        @Override
        public String execute() throws Exception{
            try {
     
                for (String s : getPositions()) {
                    position = s;
                    this.setPosition(position);
     
                    switch (position) {
                        case "AILIER":
                            id=facade.ajouterJoueur(nom, prenom, biographie, Joueur.Position.valueOf("AILIER"));
                            break;
                        case "MENEUR":
                            facade.ajouterJoueur(nom, prenom, biographie, Joueur.Position.valueOf("MENEUR"));
                            break;
                        case "PIVOT":
                            facade.ajouterJoueur(nom, prenom, biographie, Joueur.Position.valueOf("PIVOT"));
                            break;
                        case "ARRIERE":
                            facade.ajouterJoueur(nom, prenom, biographie, Joueur.Position.valueOf("ARRIERE"));
                            break;
                        case "AILIER FORT":
                            facade.ajouterJoueur(nom, prenom, biographie, Joueur.Position.valueOf("AILIER FORT"));
                            break;
                    }
                }
                return SUCCESS;
            } catch (JoueurDejaExistant joueurDejaExistant) {
                this.addFieldError("nom", getText("erreur.joueur"));
            } catch (PositionNotFoundException e) {
                this.addFieldError("position",getText("erreur.position"));
            }
           return INPUT;
        }
     
        @Override
        public void validate() {
            if (Objects.isNull(nom) || nom.length()<4){
                this.addFieldError("nom",getText("erreur.nom"));
            }
            if (Objects.isNull(prenom) || prenom.length()<4){
                this.addFieldError("prenom",getText("erreur.prenom"));
            }
            if (Objects.isNull(biographie) || biographie.length()<4){
                this.addFieldError("biographie",getText("erreur.biographie"));
            }
            if (Objects.isNull(position)){
                this.addFieldError("position",getText("erreur.champposition"));
            }
        }
        @Override
        public void setApplication(Map<String, Object> map) {
            this.facade=(FacadeJoueur) map.get("facade");
            if(Objects.isNull(this.facade)){
                this.facade=new FacadeJoueurImpl();
                map.put("facade",this.facade);
            }
        }
    }

    Voici le page accueil.jsp:

    <%@ taglib prefix="s" uri="/struts-tags" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title><s:text name="jouer"/></title>
    </head>
    <body>
        <h1> <s:text name="jouer"/> </h1>
     
        <s:form action="details">
            <s:textfield name="nom" key="nomjoueur"/>
            <s:textfield name="prenom" key="prenomjoueur"/>
            <s:select name="positions" list="%{positions}" />
            <s:textarea key="biographie"/>
            <s:submit />
        </s:form>
     
    </body>
    </html>

    Je vous remercie d'avance pour votre aide.

    • Partager sur Facebook
    • Partager sur Twitter
      2 mars 2021 à 14:41:04

      https://mkyong.com/struts2/struts-2-sselect-drop-down-box-example/ 

      a priori, mets list="positions" à la place de list="%{positions}"

      • Partager sur Facebook
      • Partager sur Twitter
        2 mars 2021 à 18:08:22

        Oui, j'ai déjà regardé ce site et aussi j'ai mis positions à la place de %{positions}, mais ça ne marche pas.

        • Partager sur Facebook
        • Partager sur Twitter
          2 mars 2021 à 18:58:55

          a priori, tu ne remplis pas la collection positions dans ton code, le problème vient peut-être de là (regarde le code de la fonction SelectAction du lien)
          • Partager sur Facebook
          • Partager sur Twitter

          [Java] Problème avec tag select Struts 2

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown