Combinando la respuesta de Cletus y dbell que en realidad podría hacer que funcione y le gustaría compartir la solución con usted (incluyendo la unión de los valores al presentar el formulario, un defecto reportado para la solución de Cletus)
No se puede utilizar directamente como un mapa de comandos, sin embargo tener otro objeto de dominio que necesita para envolver un mapa perezoso
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 es una clase que en realidad se ajusta el valor.
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;
}
El método controlador que proporciona el modelo se parece a esto:
@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;
}
Su forma debe tener este aspecto
<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 de manipulación presentación método regulador funciona como de costumbre
@RequestMapping(value="/settings", method=RequestMethod.POST)
public ModelAndView updateSettings(@ModelAttribute(value="settings") SettingsInformation settings) {
[...]
}
Comprobé que el bean SettingsInformation está realmente lleno con los valores en el formulario.
Gracias por ayudarme con este; Si usted tiene alguna pregunta no dude en preguntar.
Su sintaxis es correcta, pero las propiedades del mapa no se unen realmente. El problema es que el código generado es algo así como . Entonces, cuando envía este formulario, nada pone el valor correcto en las propiedades. – sinuhepop
Los valores de cadena de mapa pueden vincularse en JSP. ¿Pueden enlazarse los valores enteros del mapa/objeto? –
Parece que la sintaxis funciona ahora para los mapas, al menos en Spring 3.0.7 –
altumano