En combinant la réponse de Cletus et dbell je pouvais le faire fonctionner et que vous souhaitez partager la solution avec vous (y compris la liaison des valeurs lors de la présentation du formulaire, un défaut signalé pour la solution de Cletus)
Vous ne pouvez pas utiliser directement une carte comme commande, ont cependant un autre objet de domaine qui a besoin d'envelopper une carte paresseuse
public class SettingsInformation {
private Map<String, SettingsValue> settingsMap= MapUtils.lazyMap(new HashMap<String, SettingsValue>(),FactoryUtils.instantiateFactory(SettingsValue.class));
public Map<String, SettingsValue> getSettingsMap() {
return settingsMap;
}
public void setSettingsMap(Map<String, SettingsValue > settingsMap) {
this.settingsMap = settingsMap;
}
}
SettingsValue est une classe qui enveloppe réellement la valeur.
public class SettingsValue {
private String value;
public SettingsValue(String value) {
this.value = value;
}
public SettingsValue() {
}
public String getValue() {
return value;
}
public void setValue(String propertyValue) {
this.value = propertyValue;
}
La méthode du contrôleur fournissant le modèle ressemble à ceci:
@RequestMapping(value="/settings", method=RequestMethod.GET)
public ModelAndView showSettings() {
ModelAndView modelAndView = new ModelAndView("settings");
SettingsDTO settingsDTO = settingsService.getSettings();
Map<String, String> settings = settingsDTO.getSettings();
SettingsInformation settingsInformation = new SettingsInformation();
for (Entry<String, String> settingsEntry : settings.entrySet()) {
SettingsValue settingsValue = new SettingsValue(settingsEntry.getValue());
settingsInformation.getSettingsMap().put(settingsEntry.getKey(), settingsValue);
}
modelAndView.addObject("settings", settingsInformation);
return modelAndView;
}
Votre formulaire devrait ressembler à ceci
<form:form action="${actionUrl}" commandName="settings">
<form:input path="settingsMap['exampleKey'].value"/>
<input type="submit" value="<fmt:message key="settings.save"/>"/>
</form:form>
La soumission du formulaire de traitement de la méthode de commande fonctionne comme d'habitude
@RequestMapping(value="/settings", method=RequestMethod.POST)
public ModelAndView updateSettings(@ModelAttribute(value="settings") SettingsInformation settings) {
[...]
}
J'ai vérifié que le bean SettingsInformation est réellement rempli avec les valeurs du formulaire.
Merci de m'avoir aidé avec celui-ci; Si vous avez des questions, n'hésitez pas à les poser.
Votre sintaxis est correct, mais les propriétés de la carte ne sont pas réellement liées. Le problème est que le code généré est quelque chose comme . Ainsi, lorsque vous soumettez ce formulaire, rien ne met la valeur correcte dans les propriétés. – sinuhepop
Les valeurs de chaîne de carte peuvent être liées dans JSP. Les valeurs entières de la carte/de l'objet peuvent-elles être liées? –
On dirait que la syntaxe fonctionne maintenant pour les cartes, au moins au printemps 3.0.7 –
altumano