2015-12-15 3 views
0

Je vais avoir cette question où j'ai généré dynamiquement des valeurs dans les entrées cachées comme ceci:Problème avec affichage arraylist propriétés indexées de jsp à la classe d'action

<div id="items-div" class="selection-div"> 
    <input name="selectedItem[0].articleName" id="selectedItem" type="hidden" value="cereal"></input> 
    <input name="selectedItem[0].quantity" id="selectedItem" type="hidden" value="2"></input> 
    <input name="selectedItem[1].articleName" id="selectedItem" type="hidden" value="yogurt"></input> 
    <input name="selectedItem[1].quantity" id="selectedItem" type="hidden" value="10"></input> 
</div> 

J'append ces derniers aux éléments-div en utilisant jquery en fonction de ce que l'utilisateur choisit à l'écran, chacun de ces éléments est un élément.

public class Item { 

    private String articleName = ""; 
    private int quantity = 0; 

    public String getArticleName() { 
     return articleName; 
    } 
    public void setArticleName(String articleName) { 
     this.articleName = articleName; 
    } 
    public int getQuantity() { 
     return quantity; 
    } 
    public void setQuantity(int quantity) { 
     this.quantity = quantity; 
    } 
} 

Et ceci est la classe de forme qui a une ArrayList de ces articles

public class CreateArticleForm extends ActionForm { 

    private ArrayList<Item> selectedList = new ArrayList<Item>(); 

    public Item getSelectedItem(int index) { 
     if (selectedList == null) { 
      selectedList = new ArrayList<Item>(); 
     } 
     while (index >= selectedList.size()) { 
      selectedList.add(new Item()); 
     } 

     return (Item) selectedList.get(index); 
    } 
    public ArrayList<Item> getSelectedList() { 
     return selectedList; 
    } 
    public void setSelectedList(ArrayList<Item> selectedList) { 
     this.selectedList = selectedList; 
    } 

} 

Et enfin la classe d'action

public class CreateArticleAction extends 
     Action { 

    public ActionForward executeAction(ActionMapping mapping, ActionForm form, 
      HttpServletRequest request, HttpServletResponse response, User user) 
      throws Throwable { 

      CreateArticleForm articleForm = (CreateArticleForm) form; 
      //... do stuff 
    } 

} 

j'attendre à ce que le poste tout le serveur arrondissent en haut tous les selectedItem [X] et appelez le getSelectedItem pour construire l'arraylist et le peupler puis définissez les propriétés à chaque objet mais quand je soumets la page sur debug, je vois le selectedList arraylist co mes jusqu'à vide. J'utilise cette logique basée sur une affectation précédente où à la place les informations avec des propriétés indexées étaient générées au moment du chargement de la page puis imprimées avec une logique: itérer l'étiquette et chaque entrée avait une propriété indexée = "vrai", mais depuis dans ce cas c'est à partir de ce que l'utilisateur clique sur la page, j'utilise à la place jquery pour remplir le "items-div" avec ce que l'utilisateur est en train de choisir, mais ça devrait être pareil non? Est-ce que je manque quelque chose? Il fonctionnait auparavant très bien ... Merci pour votre temps. Ce qui précède fonctionne si je code en dur les entrées cachées dans la page jsp, il soumet celles-ci mais pas celles créées dynamiquement et ajoutées avec jquery.

$('.items-div').append($('<input/>').attr({ 
type : 'hidden', name: 'selectedItem['+index+'].articleName', id : 'selectedItem', value: objItem.articleName})); 
+0

Dans votre code généré, les identifiants doivent être uniques pour chaque élément de la page. En outre, les balises d'entrée n'ont pas de balises de fermeture séparées. – Bindrid

+0

Merci! Je vais supprimer ces identifiants et voir si c'est ce qui l'empêche de fonctionner En ce qui concerne les entrées, j'ai remarqué cela aussi et cela m'a dérangé, étant donné que j'utilise le code ci-dessous pour ajouter ces entrées et elles devraient être affichées comme . mais quand je charge la page ils ressemblent à ça ... '$ ('div-sélection) append ($ (' ') .attr ({type' ' : 'caché', name: 'selectedItem [' + index + '] .nomUnion', id: 'selectedItem', valeur: objItem.articleName})); ' – Ricardo

+0

Aucun dé, ne fonctionne actuellement que si je code en dur les entrées, mais pas avec celles ajoutées avec jquery ... – Ricardo

Répondre

0

Je l'ai connu depuis avant, mais apparemment il est une mesure de sécurité pour permettre que des éléments qui avaient été initialement rendus à réaffecté, donc ceux que je Codés en dur travaillé très bien, mais tous les autres en annexe -after- le rendu ne sera pas soumis, donc je devrai probablement mettre les objets dans un tableau d'objets, les JSON les assigner et les envoyer comme une chaîne à la classe d'action, en utilisant une entrée cachée existante.