2009-12-19 6 views
10

Ho un oggetto comando FaxForm e contiene un elenco di oggetti FaxStatus all'interno di una proprietà faxStatusList.Elenchi dinamici di binding con il tag modulo Spring

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

inizialmente ho avuto una pagina JSP che legano gli oggetti eseguendo il seguente:

<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> 

Tuttavia, sto cercando di capire come avrei potuto fare la rilegatura senza il ciclo foreach e l'indice . Gli esempi sul sito Web Spring mostrano l'associazione impostando il percorso del nome dell'elenco. C'è un modo per legare le proprietà? Ho provato questo ma non riesce:

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

Il faxStatusList ha un getter e metodo setter e le variabili FaxStatus ogni hanno proprietà getter/setter. Viene visualizzato l'errore "Proprietà non valida 'faxStatusList.faxStatus' di classe bean ..."

+0

faxStatusList è una proprietà indicizzata. Quindi non è possibile utilizzare qualcosa come faxStatusList.faxStatus. Utilizzare faxStatusList []. FaxStatus. –

+0

In realtà mi piace il vostro codice attuale come risposta, in quanto offre una grande flessibilità. – Steve

risposta

9

I tag modulo Spring hanno un tag . Potete usarlo come segue per fare il legame automatico:

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

È possibile che questo frammento verrà visualizzato un elenco di elementi checkbox delimitati con il tag br. Eventuali modifiche apportate allo stato delle caselle di controllo verranno applicate in modo appropriato nel FaxForm. oggetto faxStatusList.