2011-09-30 19 views
10

Volevo utilizzare il tag nascosto a molla nel codice sottostante. Questo è possibile nel seguente codice, quello che devo scrivere nel mio controller per farlo o quello che sto facendo è corretto.Campo nascosto in primavera MVC

<c:forEach var="record" items="${records}"> 
    <tr> 
     <td> 
      <form:form id="myForm" action="list.html" method="post"> 
       <input type="hidden" name="record" value="${record}" /> 
       <a href="#" onclick="document.getElementById('myForm').submit();">Submit</a> 
      </form:form> 
     </td> 
    </tr> 
</c:forEach> 

Qualsiasi aiuto sarà molto apprezzato.

Grazie

+0

è la tua domanda se e in che modo puoi ricollegare il campo al modulo? – tolitius

+0

Sì, penso, puoi vedere che qui sto usando per il ciclo e la variabile nascosta verrà popolata con il runtime del ciclo, quindi se uso

risposta

14

Siete sulla strada giusta [a seconda di ciò che il vostro backing bean è], ma al fine di impegnare un ID come un campo nascosto su presentazione automaticamente ad un fagiolo "Persona" (in questo esempio), si farebbe una cosa del genere:

<c:forEach var="person" items="${persons}" varStatus="status"> 
    <tr> 
     <c:set var="personFormId" value="person${status.index}"/> 
     .... 
     <form id="${personFormId}" action="${deleteUrl}" method="POST"> 
      <input id="id" name="id" type="hidden" value="${person.id}"/> 
     </form> 

     <td>${person.firstName}</td> 
     <td>${person.lastName}</td> 
     .... 
    </tr> 
</c:forEach> 

Nel caso in cui si desidera rendere un campo nascosto, è necessario utilizzare un tag form:hidden:

<form:hidden path="id" /> 

Dai un'occhiata alla sezione Hidden Input Tag dei documenti Spring.

2

Nel resto di questa risposta, sostituire "Elimina" e "Detected" con l'operazione che si sta tentando di implementare. ad esempio "esploso", "morso" o "modificato"

Il codice JSP che hai postato ha diversi problemi.

  1. nessun tag di chiusura per l'elemento <td>.
  2. il tuo modulo sta postando su "items.html". Questa sembra essere una pagina HTML. In tal caso, l'azione del modulo è corretta allo 0%.
  3. ogni modulo ha lo stesso ID, quindi la chiamata getElementById() non può mai funzionare.
  4. href="#" farà scorrere la pagina verso l'alto quando l'utente fa clic sul collegamento.
  5. Non si identifica, per l'utente, il record da eliminare.

Ecco cosa penso che vuoi:

<c:forEach var="record" items="${records}"> 
    <tr> 
     <td> 
      <form:form method="post"> 
       <input type="hidden" name="activity" value="delete"/> 
       <input type="hidden" name="record" value="${record}"/> 
       <a href="javascript:this.form.submit()">Delete ${record}</a> 
      </form:form> 
     <td> 
    </tr> 
</c:forEach> 

Il frammento invierà al controller primavera corrente. Nel post sono inclusi due campi: "attività" che identifica ciò come eliminazione e "record" che identifica il record da eliminare. In base alle tue esigenze, aggiungi action="some url" al tag form:form.

2

Penso di aver risolto il problema. Se scrivo tag input come questo

<form:hidden path="id" value="${record}" /> 

in questo modo posso riassegnare il valore della variabile nascosta ma quando guardo nel codice html reso la sua come questo

<input type="hidden" value="0" name="record" value="10"/> 

generare il valore di attributo due volte e prende il valore che volevo, che è 10. Ma risolve il mio problema. Se qualcuno ha ulteriori commenti su questo, sarà apprezzato.

+0

Usando Spring 1.4.0 e restituisce '' –

Problemi correlati