在JSP页面中显示数据时获取java.lang.NumberFormatException
我正在使用Hibernate和SpringMVC。我试图从两个表中获取信息,并将其显示在jsp页面中。这是我的桌子: 表名:学生在JSP页面中显示数据时获取java.lang.NumberFormatException,java,spring,hibernate,spring-mvc,Java,Spring,Hibernate,Spring Mvc,我正在使用Hibernate和SpringMVC。我试图从两个表中获取信息,并将其显示在jsp页面中。这是我的桌子: 表名:学生 student_id studentName 1. Jason Stathum @Entity @Table(name = "student") public class Student { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name="stude
student_id studentName
1. Jason Stathum
@Entity
@Table(name = "student")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="student_id", nullable= false)
private Integer studentId;
private String studentName;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name="student_id", referencedColumnName="student_id")
private List<StudentDetails> studentDetails = new ArrayList<StudentDetails>();
// Getters and Setters
public Integer getStudentId() {
return studentId;
}
public void setStudentId(Integer studentId) {
this.studentId = studentId;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public List<StudentDetails> getStudentDetails() {
return studentDetails;
}
public void setStudentDetails(List<StudentDetails> studentDetails) {
this.studentDetails = studentDetails;
}
<c:if test="${!empty student}">
<table class="studentTable">
<tr>
<th>Sl#</th>
<th>Name</th>
<th>Father</th>
<th>Mother</th>
</tr>
<c:set var="count" value="0" scope="page" />
<c:forEach items="${student}" var="row">
<c:set var="count" value="${count + 1}" scope="page"/>
<tr>
<td>${count}</td>
<td>${row.studentName}</td>
<td>${row.studentDetails.FatherName}</td> <--- this is line 29
<td>${row.studentDetails.MotherName}</td>
</tr>
</c:forEach>
</table>
</c:if>
表名:studentdetails
studentDetailsid FatherName MotherName student_id
1 Mr.X Mrs. Y 1
@Entity
@Table(name = "studentDetails")
public class StudentDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer studentDetailsId;
private String FatherName;
private String MotherName;
// Getters and Setters
public Integer getStudentDetailsId() {
return studentDetailsId;
}
public void setStudentDetailsId(Integer studentDetailsId) {
this.studentDetailsId = studentDetailsId;
}
public String getFatherName() {
return FatherName;
}
public void setFatherName(String fatherName) {
FatherName = fatherName;
}
public String getMotherName() {
return MotherName;
}
public void setMotherName(String motherName) {
MotherName = motherName;
}
在我的JSP页面中,我试图显示如下数据:
Sl# Student Father Mother
1 Jason Stathum Mr.X Mrs.Y
当我运行应用程序查看数据时,会收到以下错误消息:
HTTP状态500-在第29行处理JSP页面/WEB-INF/views/studentlist.JSP时发生异常
根本原因
java.lang.NumberFormatException:用于输入字符串:“父名称”
java.lang.NumberFormatException.forInputString(未知源)
java.lang.Integer.parseInt(未知源)
java.lang.Integer.parseInt(未知源)。。。。还有很多其他的线路
我已经在下面列出了我的代码,你能告诉我我做错了什么吗
多谢各位
实体:学生
student_id studentName
1. Jason Stathum
@Entity
@Table(name = "student")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="student_id", nullable= false)
private Integer studentId;
private String studentName;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name="student_id", referencedColumnName="student_id")
private List<StudentDetails> studentDetails = new ArrayList<StudentDetails>();
// Getters and Setters
public Integer getStudentId() {
return studentId;
}
public void setStudentId(Integer studentId) {
this.studentId = studentId;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public List<StudentDetails> getStudentDetails() {
return studentDetails;
}
public void setStudentDetails(List<StudentDetails> studentDetails) {
this.studentDetails = studentDetails;
}
<c:if test="${!empty student}">
<table class="studentTable">
<tr>
<th>Sl#</th>
<th>Name</th>
<th>Father</th>
<th>Mother</th>
</tr>
<c:set var="count" value="0" scope="page" />
<c:forEach items="${student}" var="row">
<c:set var="count" value="${count + 1}" scope="page"/>
<tr>
<td>${count}</td>
<td>${row.studentName}</td>
<td>${row.studentDetails.FatherName}</td> <--- this is line 29
<td>${row.studentDetails.MotherName}</td>
</tr>
</c:forEach>
</table>
</c:if>
控制器
@RequestMapping(value="studentlist", method = RequestMethod.GET)
public String getRecords(Model map)
{
List<Student> student = studentService.getAll();
map.addAttribute("student", student);
return "studentlist";
}
@RequestMapping(value=“studentlist”,method=RequestMethod.GET)
公共字符串getRecords(模型映射)
{
List student=studentService.getAll();
map.addAttribute(“学生”,学生);
返回“学生名单”;
}
StudentDaoImpl
@Override
@SuppressWarnings("unchecked")
public List<Student> getAll() {
return getSessionFactory().openSession().createQuery("FROM Student").list();
}
@覆盖
@抑制警告(“未选中”)
公共列表getAll(){
返回getSessionFactory().openSession().createQuery(“来自学生”).list();
}
JSP页面:学生列表
student_id studentName
1. Jason Stathum
@Entity
@Table(name = "student")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="student_id", nullable= false)
private Integer studentId;
private String studentName;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name="student_id", referencedColumnName="student_id")
private List<StudentDetails> studentDetails = new ArrayList<StudentDetails>();
// Getters and Setters
public Integer getStudentId() {
return studentId;
}
public void setStudentId(Integer studentId) {
this.studentId = studentId;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public List<StudentDetails> getStudentDetails() {
return studentDetails;
}
public void setStudentDetails(List<StudentDetails> studentDetails) {
this.studentDetails = studentDetails;
}
<c:if test="${!empty student}">
<table class="studentTable">
<tr>
<th>Sl#</th>
<th>Name</th>
<th>Father</th>
<th>Mother</th>
</tr>
<c:set var="count" value="0" scope="page" />
<c:forEach items="${student}" var="row">
<c:set var="count" value="${count + 1}" scope="page"/>
<tr>
<td>${count}</td>
<td>${row.studentName}</td>
<td>${row.studentDetails.FatherName}</td> <--- this is line 29
<td>${row.studentDetails.MotherName}</td>
</tr>
</c:forEach>
</table>
</c:if>
Sl#
名称
父亲
母亲
${count}
${row.studentName}
${row.studentDetails.FatherName}在JSP中,变量row
表示Student
对象。因此,当您说row.studentDetails
时,您现在正在获取java.util.List
当您尝试访问此列表中的任何内容时,JSP假定您正在尝试使用提供的索引获取列表中的一个元素
所以它就像list.indexNumber
,所以JSP假设FatherName
和MotherName
为数字,并尝试将它们转换为整数并获取异常
要解决此问题,您必须遍历列表:
<c:forEach items="${srow.studentDetails}" var="details">
${details.FatherName}
${details.MotherName}
</c:forEach>
在JSP中,变量行
表示学生
对象。因此,当您说row.studentDetails
时,您现在正在获取java.util.List
当您尝试访问此列表中的任何内容时,JSP假定您正在尝试使用提供的索引获取列表中的一个元素
所以它就像list.indexNumber
,所以JSP假设FatherName
和MotherName
为数字,并尝试将它们转换为整数并获取异常
要解决此问题,您必须遍历列表:
<c:forEach items="${srow.studentDetails}" var="details">
${details.FatherName}
${details.MotherName}
</c:forEach>
问题是您试图引用列表
对象的属性
${row.studentDetails}
=列表
JSTL正在尝试将父名转换为一个数字,以便在列表中获取该索引
要解决此问题,您可以执行${row.studentDetails[0].fatherName}
或者您可以在Student
中放置一个名为getDefaultStudentData()
的方法,该方法将返回第一个或“首选”学生详细信息对象,然后像${row.defaultStudentData.fatherName}
那样引用它。当然,您也可以更改输出以处理每个学生的多个学生详细信息☺ 问题是您试图引用列表
对象的属性
${row.studentDetails}
=列表
JSTL正在尝试将父名转换为一个数字,以便在列表中获取该索引
要解决此问题,您可以执行${row.studentDetails[0].fatherName}
或者您可以在Student
中放置一个名为getDefaultStudentData()
的方法,该方法将返回第一个或“首选”学生详细信息对象,然后像${row.defaultStudentData.fatherName}
那样引用它。当然,您也可以更改输出以处理每个学生的多个学生详细信息☺ 发布整个stacktrace可能有助于找到根本原因。发布整个stacktrace可能有助于找到根本原因。非常感谢您的回复。我尝试了您的代码,但这次运行应用程序时出现了以下错误:根本原因javax.el.PropertyNotFoundException:在com.spring.org.model.StudentDetails javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:237)类型上找不到属性'FatherName'
如果您在StudentDetail
对象中定义了这些属性,并为该属性使用了适当的getter和setter方法,那么您不应该得到此异常,因此请验证一下是否所有属性都存在。我想我的getter和setter方法是可以的。我已经用getter和setter代码更新了上面的问题。您认为我在映射表时可能有问题吗?非常感谢您遵循的命名约定不正确,根据Jave Beans,属性名称应该是fatherName
和motherName
。而且,即使没有对Java代码进行任何修改,您也可以访问它们,因为您有具有适当命名约定的getter和setter方法。我已经更新了我的答案,非常感谢你的回复。我尝试了您的代码,但这次运行应用程序时出现了以下错误:根本原因javax.el.PropertyNotFoundException:在com.spring.org.model.StudentDetails javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:237)类型上找不到属性'FatherName'
如果您在StudentDetail
对象中定义了这些属性,并为该属性使用了适当的getter和setter方法,那么您不应该得到此异常,因此请验证一下是否所有属性都存在。我想我的getter和setter方法是可以的。我已经更新了我的问题