2010-08-31 1 views
1

Je travaille avec des propriétés indexées (à l'aide de struts et de java/jsp). Nous avons une table dynamique qui peut ajouter/supprimer des lignes/éléments dans la table. L'ajout de lignes fonctionne comme prévu - je vois les nouvelles lignes dans le formulaire dans la classe d'action. Les lignes supprimées ne sont pas définies (évidemment), mais elles ne sont pas non plus supprimées de la liste. J'ai implémenté un void setItem (liste), void setItem (index), élément getItem (index) et liste getItem() méthodes. Je ne trouve pas beaucoup d'informations sur le comportement des propriétés indexées. Existe-t-il une méthode de réinitialisation que je dois implémenter ou des propriétés indexées sont-elles supposées prendre en charge la définition d'une nouvelle liste? D'après ce que je peux dire, seuls les éléments encore dans la liste sont définis, et ils sont définis en utilisant la méthode void setItem (Item).Suppression d'un élément d'une propriété indexée - question JavaBeans

+0

Pourriez-vous partager du code (votre jsp et votre méthode d'action à supprimer)? – CoolBeans

Répondre

1
  • Assurez-vous que votre formulaire est demande scope, pas la session scope
  • Utilisez un LazyList.

Par exemple:

private List<PropertyContact> contactsList = LazyList.decorate(new ArrayList<PropertyContact>(), PropertyContact.PROPERTY_CONTACT_FACTORY); 

public static final Factory PROPERTY_CONTACT_FACTORY = new Factory() { 
     @Override 
     public Object create() { 
      return new PropertyContact(); 
     } 
    }; 

Ensuite, vous pouvez afficher/modifier la liste dans votre JSP comme ceci:

<c:forEach items="${profileForm.contactsList}" var="contact" varStatus="contactSta"> 
    <html:hidden styleClass="contact-id" property="contactsList[${contactSta.index}].id"/> 
</c:forEach> 

Si vous voulez ajouter des éléments à la liste, assurez-vous définir un indice supérieur au maximum. Par exemple, si ma liste contient 3 éléments, le nouveau (le quatrième) se présente comme suit: (souvenez-vous de cette liste sont zéro indice basé)

<input style="hidden" styleClass="contact-id" property="contactsList[3].id"/> 

Lorsque le formulaire est soumis, tout élément de liste supprimé sera mis un null à l'index spécifique. Par exemple, disons que l'utilisateur supprime les 2èmes éléments, je verrai sur le serveur:

contactsList.get(1) == null;//remember that list are zero-index based 
Questions connexes