cyufeng
2018-08-11 23:42:19
JdbcTemplate得到List<实体>后,将List传入Jsp页面用El表达式输出时错误
这个问题困扰了我一天,虽然不难,但是非常的恶心,下面来详细的说一下
大致的问题是这样的,我用JdbcTemplate得到我的实体List,在Controller中用ModeAndView传入前端jsp中页面中用El表达式将实体中的数据循环读取出来的时候报错。最后发现是大小写的问题,因为在实体中的变量名首字母不能为大写,所以读不出数据。
以下为详情
这是我的实体类
public class x_teacher{ /** * 教师实体 */ private String Tea_Id; private String Tea_Code; private String Tea_Name; private String Tea_Username; private String Tea_Password; private String Tea_Address; private String Dr; public String getTea_Id() { return tea_Id; } public void setTea_Id(String tea_Id) { this.tea_Id = tea_Id; } public String getTea_Code() { return tea_Code; } public void setTea_Code(String tea_Code) { this.tea_Code = tea_Code; } public String getTea_Name() { return tea_Name; } public void setTea_Name(String tea_Name) { this.tea_Name = tea_Name; } public String getTea_Username() { return tea_Username; } public void setTea_Username(String tea_Username) { this.tea_Username = tea_Username; } public String getTea_Password() { return tea_Password; } public void setTea_Password(String tea_Password) { this.tea_Password = tea_Password; } public String getTea_Address() { return tea_Address; } public void setTea_Address(String tea_Address) { this.tea_Address = tea_Address; } public String getDr() { return dr; } public void setDr(String dr) { this.dr = dr; } }
这是我的Controller
@Autowired private JdbcTemplate jdbcTemplate; /* * 查询所有教师数据 * */ public List<x_teacher> FindAllTeacher() { String sql = "select * from x_teacher"; try { return jdbcTemplate.query(sql,new BeanPropertyRowMapper<x_teacher>(x_teacher.class)); } catch (Exception e) { throw new RuntimeException("查询教师数据失败"); } }
这是我的Service。
@Autowired private x_TeacherDao x_teacherDto; /* * * 2018.8.6 *遍历教师信息表 */ public List<x_teacher> FindAllTeacher() { return x_teacherDto.FindAllTeacher(); }
这是我的Dao。
@Autowired private JdbcTemplate jdbcTemplate; /* * 查询所有教师数据 * */ public List<x_teacher> FindAllTeacher() { String sql = "select * from x_teacher"; try { return jdbcTemplate.query(sql,new BeanPropertyRowMapper<x_teacher>(x_teacher.class)); } catch (Exception e) { throw new RuntimeException("查询教师数据失败"); } }
这是我的jsp,利用El表达式循环输出。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <c:forEach items="${requestScope.teahcerdata }" var="data"> <tr> <td>${data.Tea_Id}</td> <td>${data.Tea_Code}</td> <td>${data.Tea_Name}</td> <td>${data.Tea_Username}</td> </tr> </c:forEach>
就此代码部分结束。
实际输出时报错为
大致的意思为,在TeacherInformation.jsp的118行出现错误,com.school.entity.x_teacher中没有找到Tea_Id这个变量,但是返回去看看自己的实体类,明明是有这个变量是存在的。
实际上是因为el表达式的变量的首字母是不可以为大写的。
El表达式的原理:el表达式的“.”方法是通过调用get方法来得到数据的。例如上面的${data.Tea_Id},翻译过来就是data.getTea_Id()。就能得到Tea_Id。
但是有一个问题就是,这里变量的首字母如果是小写,那么El表达式会自动将首字母大写。例如${data.tea_Id},会自动将t大写,翻译过来同样是data.getTea_Id()。
但是如果你的变量本身就是大写,那么他将报错。
以上。
评论