我们正在将我们的Spring MVC系统升级到从Java 6编译的Java 8编译。在运行时,我们将一个表单对象加载到List中,当迭代时抛出java.lang.ClassCastException:java.lang.String 无法转换为java.lang.Integer
在使用Java 6编译的生产环境中,相同的代码工作正常。
以下是我们代码库的摘录。
<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。