2009-12-19 6 views
10

J'ai un objet de commande FaxForm et il contient une liste d'objets FaxStatus à l'intérieur d'une propriété faxStatusList.Listes à liaison dynamique avec l'étiquette de formulaire de Spring

public class FaxForm { 
    private List<FaxStatus> faxStatusList; 
    public void setFaxStatusList(List<FaxStatus> faxStatusList) { 
    this.faxStatusList = faxStatusList; 
    } 
    public List<FaxStatus> getFaxStatusList() { 
    return faxStatusList; 
    } 
} 

J'avais d'abord une page JSP qui lierait les objets en procédant comme suit:

<c:forEach items="${esaFaxForm.faxStatusList}" var="item" varStatus="loop"> 
    <tr class="tableAltBackground"> 
    <td> 
     <form:checkbox path="faxStatusList[${loop.index}].selected"/> 
    </td> 
    <td> 
     <form:select path="faxStatusList[${loop.index}].status" items="${esaFaxForm.statusOptions}" onchange="checkThisBox(this);"/> 
    </td> 
    <td> 
     <a href="${statusContUrl}?id=${item.id}&status=${item.status}" onclick="openFaxWindow('${viewFaxUrl}?id=${item.id}', ${loop.index});">${item.name}</a> 
     <form:hidden path="faxStatusList[${loop.index}].name"/> 
    </td> 
    <td> 
     <a href="${statusContUrl}?id=${item.id}&status=${item.status}" onclick="openFaxWindow('${viewFaxUrl}?id=${item.id}', ${loop.index});">${item.id}</a> 
     <form:hidden path="faxStatusList[${loop.index}].id"/> 
    </td> 
    </tr> 
</c:forEach> 

Cependant, je suis en train de comprendre comment je pouvais faire la liaison sans la boucle foreach et index . Les exemples sur le site Web Spring montrent la liaison en définissant le chemin d'accès au nom de la liste. Y a-t-il un moyen de lier les propriétés? Je l'ai essayé, mais il échoue:

<form:checkbox path="faxStatusList.faxStatus.selected"/> 
<form:select path="faxStatusList.faxStatus.status" items="${esaFaxForm.statusOptions}"/> 

Le faxStatusList a une méthode getter et setter et les variables FaxEtat ont chacun des propriétés getter/setter. J'obtiens l'erreur "Propriété invalide 'faxStatusList.faxStatus' de la classe de haricot ..."

+0

faxStatusList est une propriété indexée. Vous ne pouvez donc pas utiliser quelque chose comme faxStatusList.faxStatus. Utilisez faxStatusList []. FaxStatus à la place. –

+0

En fait, j'aime votre code actuel, car il offre une grande flexibilité. – Steve

Répondre

9

Les étiquettes de forme de ressort ont un cases à cocher étiquette. Vous pouvez l'utiliser comme suit pour faire la liaison automatiquement:

<form:checkboxes items="${faxStatusList}" path="faxStatusList" itemLabel="name" itemValue="id" delimiter="<br/>" onclick="yourOnClickMethodIfYouNeed(this);"/> 

L'extrait ci-dessus affiche une liste d'éléments de cases à cocher délimités avec la balise br. Toute modification apportée à l'état des cases à cocher sera reflétée de manière appropriée dans votre FaxForm. Objet faxStatusList.