通过bean解析动态Spring表单编辑框到控制器

时间:2016-05-13 11:04:16

标签: java spring spring-mvc

我试图通过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列表为空。

1 个答案:

答案 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>