Kết hợp câu trả lời của cletus và dbell tôi có thể thực sự làm cho nó hoạt động và muốn chia sẻ giải pháp với bạn (bao gồm cả liên kết của các giá trị khi nộp mẫu đơn, một lỗ hổng được báo cáo cho giải pháp cletus)
Bạn không thể sử dụng trực tiếp bản đồ dưới dạng lệnh, tuy nhiên có một đối tượng miền khác cần bọc một bản đồ lười biếng
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;
}
}
Cài đặtValue là một lớp thực sự kết thúc giá trị.
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;
}
Phương pháp điều khiển cung cấp các mô hình trông như thế này:
@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;
}
Biểu mẫu của bạn sẽ trông như thế này
<form:form action="${actionUrl}" commandName="settings">
<form:input path="settingsMap['exampleKey'].value"/>
<input type="submit" value="<fmt:message key="settings.save"/>"/>
</form:form>
Các hình thức xử lý trình phương pháp điều khiển hoạt động như bình thường
@RequestMapping(value="/settings", method=RequestMethod.POST)
public ModelAndView updateSettings(@ModelAttribute(value="settings") SettingsInformation settings) {
[...]
}
Tôi đã xác minh bean SettingsInformation thực sự được lấp đầy với các giá trị trong biểu mẫu.
Cảm ơn vì đã giúp tôi với điều này; Nếu bạn có bất kỳ câu hỏi nào, hãy hỏi.
Sintaxis của bạn là chính xác, nhưng thuộc tính bản đồ không thực sự bị ràng buộc. Vấn đề là mã được tạo ra giống như . Vì vậy, khi bạn gửi biểu mẫu này, không có gì đặt giá trị chính xác vào các thuộc tính. – sinuhepop
Giá trị chuỗi bản đồ có thể được liên kết trong JSP. Các giá trị số nguyên của bản đồ/đối tượng có bị ràng buộc không? –
Có vẻ như cú pháp hoạt động ngay bây giờ cho bản đồ, ít nhất là vào mùa xuân 3.0.7 –
altumano