2011-09-30 24 views
10

Quería usar la etiqueta oculta de primavera en el siguiente código. ¿Es esto posible en el código de abajo, lo que tengo que escribir en mi controlador para hacer eso o lo que estoy haciendo es correcto?Campo oculto en la 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> 

Cualquier ayuda será altamente solicitada.

Gracias

+0

es su pregunta si y cómo puede vincular ese campo a la forma? – tolitius

+0

Sí, creo, se puede ver que aquí estoy usando for loop y la variable oculta se completará con el tiempo de ejecución del ciclo así que si uso

Respuesta

14

Está en el camino correcto [dependiendo de lo que es su bean de respaldo], pero en fin de obligar a una identificación como un campo oculto de presentación automáticamente a un bean "Persona" (en este ejemplo), usted podría hacer algo como:

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

En caso de que desea hacer un campo oculto, se utilizaría una etiqueta form:hidden:

<form:hidden path="id" /> 

Eche un vistazo a la sección Hidden Input Tag de los documentos de Spring.

2

En el resto de esta respuesta, sustituya "eliminar" y "detente" con la operación que está intentando implementar. por ejemplo "explotado", "mordido" o "editado"

El código JSP que ha publicado tiene varios problemas.

  1. sin etiqueta de cierre para el elemento <td>.
  2. su formulario está publicando en "items.html". Esto parece ser una página html. Si es así, tu acción de formulario es 0% correcta.
  3. cada formulario tiene la misma identificación, por lo que la llamada getElementById() nunca puede funcionar.
  4. href="#" hará que su página se desplace hacia la parte superior cuando el usuario haga clic en el enlace.
  5. No identifica, para el usuario, el registro que se eliminará.

Aquí es lo que pienso que deseas:

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

El fragmento publicará al controlador actual primavera. Se incluyen dos campos en la publicación: "actividad" que identifica esto como una eliminación y "registro" que identifica el registro que se eliminará. Según sus necesidades, agregue action="some url" a la etiqueta form:form.

2

Creo que he resuelto el problema. Si escribo etiqueta de entrada como esta

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

de esta manera puedo volver a asignar el valor de la variable oculta, pero cuando miro en el código HTML representado es como esta

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

generar el valor del atributo dos veces y toma el valor que quería, que es 10. Pero resuelve mi problema. Si alguien tiene más comentarios sobre esto, será apreciado.

+0

Usando Spring 1.4.0 y representa '' –