使用JSTL在JSP中获取值时获取NumberFormatException

时间:2014-09-14 14:07:48

标签: spring hibernate jsp jstl

我正在开发Spring / Hibernate示例Web应用程序。实际上,我正在尝试从数据库加载员工。在这种情况下,当从数据库获取员工和地址表的数据时,我得到了NumberFormat异常。

以下是我正在处理的代码,

JSP代码:

      <c:if  test="${!empty employeeList}">
        <table class="data">
<c:forEach items="${employeeList}" var="emp">
    <tr>
        <td><c:out value="${emp.firstname}" /></td>
        <td><c:out value="${emp.lastname}" /></td>
        <td><c:out value="${emp.email}" /></td>
        <td><a href="edit/${emp.id}">Edit</a></td>
        <td><a href="delete/${emp.id}">Delete</a></td>
    </tr>
</c:forEach>

控制器代码:

@RequestMapping(value = "/", method = RequestMethod.GET)
public String listEmployees(ModelMap map) 
{
    map.addAttribute("employeeList", employeeManager.getAllEmployees());
    return "editEmployeeList";
}

服务层代码:

 @Override
@Transactional
public List<EmployeeEnitity> getAllEmployees() {
    return employeeDAO.getAllEmployees();
}


public List<EmployeeEntity> getAllEmployees() {
    return this.sessionFactory.getCurrentSession().createQuery("select ee.firstname,ee.lastname,addr.email from " +
            "com.howtodoinjava.entity.EmployeeEntity ee, com.howtodoinjava.entity.AddressEntity addr where ee.id=addr.id").list();

}

请帮我解决此异常

1 个答案:

答案 0 :(得分:1)

服务方法getAllEmployeessession.createQuery(String).list()的返回类型为List<Object[]>,不是List<Employee>

在控制器中,您可以在此行中将此List<Object[]>添加到模型中:

map.addAttribute("employeeList",employeeList);

现在在JSP中,您正尝试在JSTL forEach循环中访问模型对象:

<c:forEach items="${employeeList}" var="emp">

由于employeeList代表List<Object[]>,变量emp代表Object[],而不是Employee。现在在变量dot (.)上使用emp运算符意味着您正在尝试访问特定索引位置的元素。例如:

emp.0 --> is same as emp[0]
emp.1 --> is same as emp[1]
emp.indexPosition --> is same as emp[indexPosition]

因此,当您说emp.firstName时,firstName会转换为整数,因为firstName不是您获得的整数NumberFormatException