升级到Java 8时弹出表单绑定到List <integer>不起作用

时间:2017-02-06 20:17:24

标签: spring-mvc java-8

我们正在将我们的Spring MVC系统升级到从Java 6编译的Java 8编译。在运行时,我们将一个表单对象加载到List中,当迭代时抛出java.lang.ClassCastException:java.lang.String  无法转换为java.lang.Integer

在使用Java 6编译的生产环境中,相同的代码工作正常。

以下是我们代码库的摘录。

JSP

<div class="row">
        <span class="lbl"> <b>Menus</b>: </span>
        <span class="formw">
            <form:select path="selectedMenuIdList" multiple="true" id="selectedMenuIdList" size="5">
                <c:forEach items="${menus}" var="topLevelMenu">
                    <form:option value="${topLevelMenu.menuId}">-<c:out value="${topLevelMenu.menuTitle}"/></form:option>
                    <c:forEach items="${topLevelMenu.childList}" var="subMenu"><form:option value="${subMenu.menuId}">---<c:out value="${subMenu.menuTitle}"/></form:option></c:forEach>
                </c:forEach>
            </form:select>
        </span>
    </div>

控制器

我没有添加完整的方法。但这就是它正在做的事情。

 protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, ManageUserCommand command, BindException errors) throws Exception
    {
        List<Integer> selectedMenuIdList = command.getSelectedMenuIdList();
        for (Integer menu : selectedMenuIdList){//exception thrown here 
        userMenu.setMenuId(menuId);
        userMenuDao.save(userMenu);
     }
    }

当我重新编写如下代码时,它可以工作。

Iterator<Integer> i = selectedMenuIdList.iterator();
 while(i.hasNext()){
    String temp = String.valueOf(i.next());
    Integer menuId = Integer.parseInt(temp);
    userMenu.setMenuId(menuId);
    userMenuDao.save(userMenu);
 }

请说明使用java 8会出现什么问题,因为我们不能重新编写上面的所有代码,以使其适用于Java 8。

0 个答案:

没有答案