ModelAttribute renvoie des valeurs null dans le contrôleur Spring MVC
Ok, il est temps de demander de l'aide, je suis l'envoi d'un (shopping) Panier ModelAttribute à ma jsp, permettant à l'utilisateur de modifier la quantité, lorsque le Modèle est à la POSTE de contrôleur de les champs sont nuls à l'exception de l'modifiable (quantité). J'ai fait des recherches pendant des jours sur des questions similaires, mais rien n'est modifié. Je suis à l'aide de printemps 3.1.
Voici mon contrôleur sur le POST et GET:
@Controller
public class CartController {
@Autowired
private Cart cart;
@RequestMapping(value = "/cart", method = RequestMethod.GET)
public String showCart(Model model) {
logger.debug("CartController.showCart() Cart: {}", this.cart);
model.addAttribute(cart);
return "cart/cart";
}
et POST
@RequestMapping(value = "/cart", method = RequestMethod.POST, params = "update")
public String update(@ModelAttribute("cart") Cart cart, BindingResult result, Model model) {
logger.debug("CartController.update() Cart: {}", cart);
return "cart/cart";
}
ma jsp:
<div class="container MainContent">
<form:form method="POST" modelAttribute="cart">
<fieldset>
<legend>Cart</legend>
<table class="table">
<thead>
<tr>
<th>Product Name</th>
<th>Quantity</th>
<th>Product Price</th>
</tr>
</thead>
<tbody>
<c:forEach items="${cart.cartDetails}" var="cartDetail" varStatus="status">
<tr>
<td>${cartDetail.product.name}</td>
<td><form:input path="cartDetails[${status.index}].quantity" size="1" /></td>
<td>${cartDetail.price}</td>
</c:forEach>
<tr>
<b><td colspan="2" align="right"><spring:message code="order.total" /></b>
</td>
<td>${cart.totalCartPrice}</td>
</tr>
</tbody>
</table>
</fieldset>
<div></div>
<button id="order" name="order">
<spring:message code="button.order" />
</button>
<button id="update" name="update">
<spring:message code="button.update" />
</button>
</form:form>
</div>
et le journal résultats pour panier, avant de s':
CartController.showCart() Panier: le Panier [cartDetails=[CartDetail
produit=com.Product@c26440[nom=Mon Nom],
quantité=1]], totalCartPrice=10.00]
et après la mise à jour de la quantité de 1 à 3 dans la page jsp et puis après pour le contrôleur:
CartController.mise à jour() Panier: le Panier [cartDetails=[CartDetail
[produit=null, quantité=3]], totalCartPrice=null]
J'ai lu plusieurs post ici et sur le forum du Printemps et essayé différentes solutions proposées avec pas de chance. Il semble que ma édité quantité résultats sont arriver lié à l'Objet correctement, mais pourquoi ne sont pas les autres?
OriginalL'auteur brad12s | 2014-09-09
Vous devez vous connecter pour publier un commentaire.
En supposant que vous avez tous les champs de votre Formulaire d'objet;
Vous devez spécifier les champs du formulaire et remplissez-le avec vos données.
ne imprimer le résultat à l'écran. Si vous souhaitez lier à votre formulaire, vous devez le mettre dans un printemps formulaire de saisie tels que:
Si vous ne voulez pas qu'il soit modifiable, alors vous pouvez le mettre dans un champ caché, mais à la fin vous aurez à mettre dans un élément de formulaire dans la page jsp et ont un champ correspondant dans votre formulaire de POJO
OriginalL'auteur Sezin Karli
Semble que d'autres champs ne sont pas liés, essayez de lier par exemple nom du produit
OriginalL'auteur Roman C
Une fois, j'ai passé beaucoup de temps à enquêter sur un problème similaire. J'ai enfin trouvé le coupable à l'intérieur d'un
Binder
's méthode d'initialisation:Cette méthode permet de définir une restriction sur les champs qui sont autorisés pour la liaison. Et tous les autres champs sont indépendant, naturellement, résultant dans
null
valeurs.L'autre raison possible: pas de poseurs dans un Haricot annotée avec @ModelAttribute. Par exemple,
Object setName(String name)
au lieu devoid setName(String)
.OriginalL'auteur naXa