spring:绑定在列表中使用时抛出错误

时间:2013-01-02 20:16:48

标签: spring spring-mvc

我有一个包含用户的列表。我试图在JSP中打印它,但有些我无法使用spring:bind来打印它。我得到一个例外。我尝试使用spring:bind的原因是要调用@Formatting注释。

JSP中的代码

<c:forEach items="${users}" var="user" varStatus="status">
   <spring:bind path="users[${status.index}].name">
      <c:out value="${status.value}" />
   </spring:bind>
</c:forEach>

控制器

ModelAndView modelAndView = new ModelAndView("go_some_JSP_page");
List<UserEntity> users = userManager.getAllObjects();
modelAndView.addObject("users", users);

BTW,UserEntity有名字字段。如果我删除绑定并尝试使用user.name打印<c:out value="user.name" />,则会打印值

https://github.com/hth/StatusInvoke.git

存在测试样本代码

请查看landing.jsp第35行

如果你在部署它时遇到任何问题,请告诉我。

2 个答案:

答案 0 :(得分:1)

我能让它工作的唯一方法是你绑定的bean路径是否在基本命令bean中。在我的情况下,我正在使用MyForm,它具有用户的getter和setter。 spring绑定标记似乎不在基本表单命令bean之外。

因此您的控制器方法需要更改为。

@RequestMapping(method = RequestMethod.GET)
public ModelAndView loadForm() {
    ModelAndView modelAndView = new ModelAndView("landing");
    MyForm myForm = new MyForm();
    myForm.setUsers(populate());
    modelAndView.addObject("myForm", myForm);
    return modelAndView;
}

在你的jsp中有以下内容。

<form:form commandName="myForm">
    <c:forEach var="user" items="${myForm.users}" varStatus="status">
        <tr>
            <td><spring:bind path="users[${status.index}].loginName">
                    <c:out value="${status.value}" />
                </spring:bind></td>
            <td><spring:bind path="users[${status.index}].balance">
                    <c:out value="${status.value}" />
                </spring:bind></td>
        </tr>
    </c:forEach>
</form:form>

答案 1 :(得分:0)

调用@NumberFormat注释的正确答案是使用spring:eval expression标记

<spring:eval expression="user.balance" />