0

我有一个包含用户的列表。我正在尝试在 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);

顺便说一句,UserEntity 有名称字段。如果我删除绑定并尝试user.name使用<c:out value="user.name" />它打印值

测试示例代码位于https://github.com/hth/StatusInvoke.git

请看一下landing.jsp第35行

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

4

2 回答 2

1

我可以让它工作的唯一方法是,如果您绑定到的 bean 路径在基本命令 bean 中。就我而言,我使用的是 MyForm,它为用户提供了 getter 和 setter。spring bind 标记似乎在基本表单命令 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>
于 2013-01-02T21:45:27.847 回答
0

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

<spring:eval expression="user.balance" />
于 2013-01-03T01:10:57.110 回答