我试图通过Spring bean保留动态编辑框。
这是我控制器中的post方法:
@RequestMapping(value = "/secure/settings", method = RequestMethod.POST)
@Secured({"ROLE_ADMIN"})
public String complete( @ModelAttribute("settingsBean") SettingsBean settings, ModelMap model)
{
return ControllerUtils.redirect("/secure/settings");
}
这是我的“Setting”bean类定义:
public class SettingBean
{
private Integer id;
private String name;
private String value;
}
这是我的“设置”bean类定义(注意它们是不同的)。
public class SettingsBean
{
private List<SettingBean> settings;
}
这是相关的HTML:
<form:form method="POST" action="${action}" class = "form-horizontal" modelAttribute="settingsBean" role="form">
<div class="form-group">
<tbody>
<c:forEach var="setting" items="${settingsBean.settings}">
<tr>
<td>${setting.name}</td>
<td><input name="settings[${setting.id}]" value="${setting.value}" path="value" class="form-control" type="text"/></td>
</tr>
</c:forEach>
</tbody>
</div>
</form:form>
构造SettingsBean时,settings
列表为空。
答案 0 :(得分:0)
Spring使用语法propertyName [index]绑定索引属性,其中index从0开始。使用c:forEach的JSTL varStatus属性与表单标签一起收集索引值。将表单更改为
<form:form method="POST" action="${action}" class = "form-horizontal" modelAttribute="settingsBean" role="form">
<div class="form-group">
<tbody>
<c:forEach var="setting" items="${settingsBean.settings}" varStatus="status">
<tr>
<td>${setting.name}</td>
<td><form:input path="settings[${status.index}]" class="form-control" /></td>
</tr>
</c:forEach>
</tbody>
</div>
</form:form>