poignée en forme de post avec un tableau d'éléments de spring MVC
Je suis en train d'envoyer des données à partir du côté du client vers le serveur, et l'ont transformé en un téléchargement de fichier.
Je suis à l'aide d'un formulaire HTML simple parce que je veux initialiser le téléchargement d'un fichier (et non pas de l'AJAX).
l'un des champs de formulaire est un tableau d'éléments. (les deux autres sont le nom et la description de chaînes de caractères).
Je suis la sérialisation de ce champ à une chaîne de caractères (JSON.stringify) avant de soumettre le formulaire.
sur le côté serveur, j'ai essayé un million de techniques (@ModelAttribute vs @RequestBody, différents jackson cartographie bean configurations) pour convertir ce qu'à un seul type ou de trois types distincts (chaîne + Chaîne + Liste/Tableau).
les exemples que j'ai trouvés étaient seulement pour l'AJAX...
quelqu'un peut-il fournir un exemple de travail ou une description d'une?
=======
Mise à jour:
J'ai mis en place une solution de contournement en JSON.stringify-tion de la collecte et de la passer dans l'une des entrées,
et sur le côté serveur j'ai:
@RequestMapping(method = RequestMethod.POST, value = "exportSectionsToExcel")
public HttpEntity<byte[]> createExcelWorkBook(@ModelAttribute ExportSectionsListForm exportSectionsListForm) {
Section[] sectionObjects = gson.fromJson(exportSectionsListForm.getSections(), Section[].class);
...
avec ExportSectionsListForm objet contenant des chaînes de caractères seulement:
public class ExportSectionsListForm {
private String name;
private String url;
private String rssUrl;
private String sections;
...
(omitting ctor, getters and setters)
en outre, j'ai trouvé cette prometteuse lien:
http://viralpatel.net/blogs/spring-mvc-multi-row-submit-java-list/
mais n'essayez pas - semble que je vais avoir besoin de générer dynamiquement des éléments d'entrée pour que cela fonctionne, mais il pourrait en fait être la bonne solution. quelqu'un a déjà essayé?
J'ai essayé de nombreuses techniques de chaque causé des problèmes différents, et aucun n'a fonctionné alors je suis à la recherche d'un exemple de travail...
Parce que je suis hors du bureau, ne peut donc pas fournir mon code, mais je vous suggérons d'ajouter un point d'arrêt à votre contrôleur de méthode et de vérifier quels sont les types de données stockées dans la demande?
merci. J'ai l'habitude, soit un seul de plusieurs exceptions, ou un tableau vide/liste. Je suis à la recherche d'une solution qui comprend (1) la sérialisation sur le côté client (json? square-crochets éléments de tableau tel que l'article[1], [2], etc.?), et (2) annoté contrôleur de la signature de la méthode + haricot de configuration.
Vous pouvez utiliser firebug pour vérifier quelles sont les données que vous envoyez à la manette.
OriginalL'auteur Yonatan Karni | 2013-03-19
Vous devez vous connecter pour publier un commentaire.
L' @ModelAttribute tag allons essayer de construire l'objet en fonction de la forme des écritures. Puisque vous êtes la sérialisation de votre formulaire de valeurs en JSON, cela ne marchera pas. @RequestBody simplement vous donne une Chaîne de caractères représentant le corps de la requête. Donc, vous pourriez obtenir la Chaîne de caractères représentant le JSON soit passé, puis demarshal au format JSON à l'aide de Jackson, de FlexJSON (ou quelle que soit la librairie JSON que vous utilisez). Je ne suis pas sûr que c'est la meilleure approche, si.
Je voudrais vous demander pourquoi vous besoin de sérialiser la forme de JSON pour commencer. Printemps poignées de formes avec des Listes/Cartes de l'amende juste. Il suffit de soumettre le formulaire à l'aide de l' @ModelAttribute, ce qui rend votre "tableau" et la Liste, ou tout ce que vous attendez, sur le Contrôleur. Donc, si j'interprète votre exemple correctement, mon ModelAttribute ressemblerait à:
Alors ma méthode de Contrôleur:
Sur le côté forme, en utilisant le Printemps des balises JSTL, il suffit de faire votre "sections" champs de ressembler à:
Ou, si vous préférez utiliser le langage HTML, puis
Qui est ce qui est généré par les balises JSTL. Aussi longtemps que les valeurs de "sections" dans la requête HTTP comme " section[#]=valeur", vous êtes tous ensemble.
L'un caviat avec des Listes/Cartes de Spring MVC avec des formes qui permettent l'ajout, la suppression, c'est que vous avez en quelque sorte à garder la trace de ceux que vous retirer si vous mettez votre ModelAttribute dans la session. Le problème est que le ModelAttribute est créé une seule fois, de sorte que la liste/carte est. Ultérieure postes de ne pas re-créer la liste/carte, seulement modifier/insérer les éléments que vous avez spécifiquement référence dans le post de formulaire. Ainsi, par exemple, si vous aviez 10 éléments dans votre liste, et vous supprimez le 5e sur la Vue de côté, le Printemps sera réglé de 1 à 4 et 6 à 10, et 5 sera toujours l'ancienne valeur depuis le poste n'a pas porté le n ° 5.
OriginalL'auteur CodeChimp
J'ai travaillé sur le même sujet. Et si j'ai plusieurs entrées avec hein même nom tel que:
et j'ai un formulaire mappé à ma méthode comme ceci:
et dans ce formulaire, j'ai getters et setters pour une propriété nommée:
String[] abc , le printemps est en transmettant ces valeurs dans ce tableau bien!
OriginalL'auteur user1641252