2015-10-08 19 views
5

Ho una forma a molla con oggetto di supporto per esso. La forma è come questo-come associare i dati all'elenco in forma primaverile

<sf:form cssClass="form-horizontal" commandName="campaignModel" method="post"> 
<sf:input path="campaign.name" class="form-control" /> 
<sf:input path="landingPageModels.landingPage.url" class="form-control" /> 
</sf:form> 

classe del modello (Modulo di supporto Object) -

CampaignModel.java

public class CampaignModel { 
private Campaign campaign = new CampaignImpl(); 
private List<LandingPageModel> landingPageModels = new Arraylist<LandingPageModel>; 
public Campaign getCampaign() { 
    return campaign; 
} 
public void setCampaign(Campaign campaign) { 
    this.campaign = campaign; 
} 
public List<LandingPageModel> getLandingPageModels() { 
    return landingPageModels; 
} 
public void setLandingPageModels(List<LandingPageModel> landingPageModels) { 
    this.landingPageModels = landingPageModels; 
} 

LandingPageModel.java è -

public class LandingPageModel { 
private LandingPage landingPage = new LandingPageImpl(); 
private List<LandingPageParameterImpl> landingPageParameters = new ArrayList<LandingPageParameterImpl>(); 

public LandingPage getLandingPage() { 
    return landingPage; 
} 
public void setLandingPage(LandingPage landingPage) { 
    this.landingPage = landingPage; 
} 
public List<LandingPageParameterImpl> getLandingPageParameters() { 
    return landingPageParameters; 
} 
public void setLandingPageParameters(List<LandingPageParameterImpl> landingPageParameters) { 
    this.landingPageParameters = landingPageParameters; 
} 
} 

LandingPage.java è -

public class LandingPageImpl extends EntityImpl implements LandingPage { 

private String url; 

public String getUrl() { 
    return url; 
} 

public void setUrl(String url) { 
    this.url = url; 
} } 

Quindi voglio che io possa inserire molti oggetti di Landingpage (che hanno la loro proprietà URL) nella lista landingPageModels. Ciò significa che posso avere tag input mulitple avere proprietà url come questo -

<sf:input path="landingPageModels.landingPage.url" class="form-control" /> 
<sf:input path="landingPageModels.landingPage.url" class="form-control" /> 
<sf:input path="landingPageModels.landingPage.url" class="form-control" /> 

Ma quando si esegue questo codice, la primavera mi dà errore che la proprietà Landingpage di landingPageModels non ha getter metodo setter. Come risolverlo e come assumere più valori come questo?

risposta

1

Per associare una proprietà elenco di modelli a più campi di input, avete bisogno di questo in forma resa:

<input type="text" name="landingPageModels[0].landingPage.url" class="form-control" /> 
<input type="text" name="landingPageModels[1].landingPage.url" class="form-control" /> 
<input type="text" name="landingPageModels[2].landingPage.url" class="form-control" /> 

che si realizza da:

<c:forEach items="${campaignModel.landingPageModels}" varStatus="s"> 
    <sf:input path="landingPageModels[${s.index}].landingPage.url" class="form-control" /> 
</c:forEach> 
+0

nel mio caso ho bisogno di dare un indice dinamicamente ... non in ciclo continuo ... allora come possiamo farlo? –

-1

io non so come si fa con la forma a molla Ingresso lib, ma se si desidera associare utilizzando semplici input HTML che è possibile associare lista come questa

Simple.jsp

<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> 
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<html> 
<head> 
</head> 
<body> 

    <form:form method="post" action="save.html" modelAttribute="contactForm"> 
     <table> 
     <tr> 
      <th>First Name</th> 
      <th>Last Name</th> 
     </tr> 
      <tr> 
       <td><input name="contacts[0].firstname" /></td> 
       <td><input name="contacts[0].lastname" /></td> 
      </tr> 
      <tr> 
       <td><input name="contacts[1].firstname" /></td> 
       <td><input name="contacts[1].lastname" /></td> 
      </tr> 

    </table>  
    <br/> 
    <input type="submit" value="Save" /> 

    </form:form> 
    </body> 
    </html> 

@controller:

@RequestMapping(value = "/save", method = RequestMethod.POST) 
    public ModelAndView save(@ModelAttribute("contactForm") ContactForm contactForm) { 

     List<Contact> contacts = contactForm.getContacts(); 

     if(null != contacts && contacts.size() > 0) { 
      ContactController.contacts = contacts; 
      for (Contact contact : contacts) { 
       System.out.printf("%s \t %s \n", contact.getFirstname(), contact.getLastname()); 
      } 
     } 

     return new ModelAndView("show_contact", "contactForm", contactForm); 
    } 

ContactForm.java

import java.util.List; 

public class ContactForm { 

    private List<Contact> contacts; 

    public List<Contact> getContacts() { 
     return contacts; 
    } 

    public void setContacts(List<Contact> contacts) { 
     this.contacts = contacts; 
    } 
} 

Contact.java

public class Contact { 
    private String firstname; 
    private String lastname; 
    private String email; 
    private String phone; 

    public Contact() { 

    } 
//getters and setters 

} 
+0

allora come posso ottenere in controllore? –

+0

dopo averlo fatto mi dà questo errore - Stato HTTP 500 - Elaborazione richiesta fallita; l'eccezione nidificata è org.springframework.beans.InvalidPropertyException: proprietà 'destinationPageModels [0]' della classe bean [com.mogae.AdTag.model.CampaignModel] non valida della proprietà: Indice dei limiti del percorso della proprietà 'landingPageModels [0]'; l'eccezione nidificata è java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 –

0

L'errore che si stanno ottenendo è corretto come landingPageModels è una lista. Dovresti utilizzare l'accesso all'indice come questo landingPageModels[0].landingPage.url. Se si dispone di serie dinamica di input/url, quindi è possibile utilizzare <c:forEach> per creare input dinamico nomi di variabili

+0

landingPageModels è una lista non landingPageModels.landingPage, allora come possiamo scrivere così: landingPageModels.landingPage [0]? –

+0

Quindi sarebbe 'landingPageModels [0] .landingPage.url' e itera su indici come suggerito da @shaleindra. – Kafkaesque

+0

Correggere l'espressione. – Shailendra

0
<c:forEach items="${campaignModel.landingPageModels}" var="landingPage"> 
    <sf:input path="landingPage.url" class="form- control" /> 
</c:forEach> 

Saranno quanto sopra non funziona per voi di visualizzare i dati? Per ottenerli nel controller potrebbe essere necessario utilizzare il concetto di riga di tabella dinamica in HTML o per ogni singola voce di LandingPage per aggiungere oggetto bean facendo clic sul pulsante Aggiungi e esegui il rendering.

Nel mio caso Person oggetto comando avendo List<Token> proprietà, al fine di impegnare l'elenco di token abbiamo progettato pagina come schermo collegato girato sotto, cliccando sulla pulsante Aggiungi colpisce il controller e aggiungere il ogni gettone List<Token> e rendere di nuovo allo stesso visualizza e visualizza token aggiunto nella visualizzazione elenco, facilita l'aggiunta di più token per Person.

enter image description here

+0

Non funzionerà, dovrai usare varStatus per riempire il percorso. Funzionerà per la visualizzazione non per il binding su un invio. –

+0

@ M.Deinum Puoi rispondere alla mia domanda per sapere come posso risolvere il problema. Sono bloccato in questo da 6 giorni. –

+0

non voglio usare per il ciclo .... come posso legare i dati nell'elemento di lista senza ciclo? –

Problemi correlati