Combinando la risposta di Cletus e dbell ho potuto effettivamente farlo funzionare e vorrebbe condividere la soluzione con voi (compreso legame di valori al momento della presentazione del modulo, un difetto segnalato per soluzione Cletus)
Non è possibile utilizzare direttamente una mappa come di comando, tuttavia hanno un altro oggetto di dominio che ha bisogno di avvolgere una mappa pigro
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 è una classe che in realtà avvolge il valore.
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;
}
Il metodo di controllo che fornisce il modello si presenta così:
@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;
}
Il modulo dovrebbe essere simile
<form:form action="${actionUrl}" commandName="settings">
<form:input path="settingsMap['exampleKey'].value"/>
<input type="submit" value="<fmt:message key="settings.save"/>"/>
</form:form>
La forma movimentazione metodo di controllo presentazione funziona come al solito
@RequestMapping(value="/settings", method=RequestMethod.POST)
public ModelAndView updateSettings(@ModelAttribute(value="settings") SettingsInformation settings) {
[...]
}
Ho verificato che il bean di SettingsInformation sia effettivamente riempito con i valori nel modulo.
Grazie per avermi aiutato con questo; Se avete domande non esitate a chiedere.
Il tuo sintassi è corretto, ma le proprietà della mappa non vengono effettivamente associate. Il problema è che il codice generato è qualcosa come . Quindi, quando invii questo modulo, nulla mette il valore corretto nelle proprietà. – sinuhepop
Mappa I valori delle stringhe possono essere associati in JSP. I valori interi di mappa/oggetto possono essere vincolati? –
Sembra che la sintassi funzioni ora per le mappe, almeno nella primavera 3.0.7 –
altumano