requestmapping puede para método mvc modelo formulario form escritura encontrar ejemplo commandname atributo arquitectura java spring java-ee spring-mvc

java - puede - spring mvc ejemplo



¿Cómo puedo vincular los atributos de la colección a un formulario en Spring MVC? (6)

Creo que tiene que ser una colección ordenada. Por ejemplo, hay una tabla en la referencia de Spring que habla sobre cómo hacer referencia a las propiedades. Dice:

cuenta [2] Indica el tercer elemento de la cuenta de propiedad indexada. Las propiedades indizadas pueden ser de tipo matriz, lista u otra colección ordenada naturalmente (énfasis en ellas)

Quizás un enfoque sería agregar un getter a su objeto que, en lugar de devolver su Set, devuelva Set.toArray (). Entonces su atributo de elementos haría referencia a la matriz. Por supuesto, no puede depender del pedido.

Estoy intentando vincular uno de mis objetos modelo a los campos de un formulario, utilizando Spring-MVC. Todo funciona bien, excepto que uno de los atributos del objeto modelo es una colección desordenada. Haciendo algo como

<c:forEach items="${m.items}" var="i" varStatus="itemsRow"> <form:input path="items[${itemsRow.index}]"/> </c:forEach> <form:errors path="items" />

funcionaría bien para una propiedad de tipo Lista, pero para un Conjunto arroja un error cuando, al enviarlo, intenta vincular el contenido del campo de entrada a los atributos del objeto.

¿Hay algo en Spring que salga de la caja con Sets?


No tengo una idea clara de cómo exactamente esto se ve obligado, pero funciona para mis propósitos.

<c:forEach items="${items}" var="i" varStatus="itemsRow"> <input name="items[${itemsRow.index}].fieldName" type="text"/> </c:forEach> <form:errors path="items" />


Creo que la razón por la que no funciona con un conjunto es porque no se garantiza el orden de un conjunto. Cuando intenta vincularse al primer objeto en la publicación, puede que no haya sido el primer objeto en esa lista en procesar. Por ejemplo, los elementos [0] pueden no ser los mismos entre GET y POST.

Por lo tanto, debería funcionar bien si usa una implementación de Set que está ordenada, como SortedSet o TreeSet.


Podría intentar escribir su propio Editor personalizado para hacer el trabajo, y luego registrar el editor con el controlador para el formulario. No tendría que molestarse en indexar los elementos en el conjunto de esa manera. Y como se mencionó anteriormente, si hay una forma de clasificar los elementos, puede garantizar su orden en el conjunto usando SortedSet.


Puede usar una lista delimitada por punto y coma si está utilizando referencias numéricas a las ID de los objetos y una implementación apropiada de Convertidor registrada.

POST tablas de clasificación de datos = 1,2

Implementación del convertidor (ignore las cosas de JSON)

public final class LeaderboardConverter extends JsonDeserializer<Leaderboard> implements Converter<String, Leaderboard> { public Leaderboard convert(String source) throws IllegalArgumentException { Leaderboard activity = new Leaderboard(); activity.setId(new Integer(source)); return activity; } public Leaderboard deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { return convert(jp.getText()); } }