For input string: "id"报错

时间:2022-10-14 20:21:00
是一个简单地本科javaee ssh的大实验
在菜品页面前台取dishes.id的时候说我的id值类型不对。但是下面有一段展示用户列表的,却没有报错,正常显示。我的菜品页面是粘的用户页面的。后台也都是粘的。为什么菜品页面就有问题
有问题的菜品页面:
<s:iterator value="#session.dishlist"  var="dishes">
<tr>
<td bgcolor="#ffffff" align="center" >
 <input type="checkbox" name="boxname" value="${dishes.id}"/>
</td>
<td bgcolor="#ffffff" align="center">
${dishes.id}
</td>
<td bgcolor="#ffffff" align="center">
${dishes.dishname}
</td>
<td bgcolor="#ffffff" align="center">
${dishes.price}
</td>

<td bgcolor="#ffffff" align="center">
<form action="dishes/dish_dishUpdata" method="post" >
<input type="hidden" name="dish.id" value="${dishes.id}" >
<input type="hidden" name="dish.dishname" value="${dishes.dishname}" >
<input type="hidden" name="dish.price" value="${dishes.price}" >
<input type="submit" value="修改"  >
</form>
</td>
<td bgcolor="#ffffff" align="center">
<a href="dishes/dish_deleteDish?dish.id=${dishes.id}" onclick="return confirmit()" >删除</a>
</td>

</tr>
</s:iterator>


正常显示的用户页面
<s:iterator value="#session.userlist"  var="users">
<tr>
<td bgcolor="#ffffff" align="center" >
 <input type="checkbox" name="boxname" value="${users.id}"/>
</td>
<td bgcolor="#ffffff" align="center">
${users.id} 
</td>
<td bgcolor="#ffffff" align="center">
${users.username}
</td>
<td bgcolor="#ffffff" align="center">
${users.password}
</td>

<td bgcolor="#ffffff" align="center">
<form action="users/user_userUpdata" method="post" >
<input type="hidden" name="user.id" value="${users.id}" >
<input type="hidden" name="user.username" value="${users.username}" >
<input type="hidden" name="user.password" value="${users.password}" >
<input type="submit" value="修改"  >
</form>
</td>
<td bgcolor="#ffffff" align="center">
<a href="users/user_deleteUser?user.id=${users.id}" onclick="return confirmit()" >删除</a>
</td>

</tr>
</s:iterator>


报错信息
六月 14, 2018 4:47:29 下午 org.apache.catalina.core.ApplicationDispatcher invoke
严重: Servlet.service() for servlet jsp threw exception
java.lang.NumberFormatException: For input string: "id"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at javax.el.ListELResolver.coerce(ListELResolver.java:163)
at javax.el.ListELResolver.getValue(ListELResolver.java:51)
at org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:104)
at org.apache.el.parser.AstValue.getValue(AstValue.java:183)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184)
at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:967)
at org.apache.jsp.WEB_002dINF.dishes.dish_005fdishQuery_005fsuccess_jsp._jspx_meth_s_005fiterator_005f0(dish_005fdishQuery_005fsuccess_jsp.java:217)
at org.apache.jsp.WEB_002dINF.dishes.dish_005fdishQuery_005fsuccess_jsp._jspService(dish_005fdishQuery_005fsuccess_jsp.java:158)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)

16 个解决方案

#1


贴下后台代码,还有实体类中dishes.id和数据库字段的类型是什么

#2


你的value="#session.dishlist"这个对象,返回的是list<dishlist>还是list<Object>额,原因应该你的这个对象返回的是Object,所以没办法用dishlist.id

#3


dish_005fdishQuery_005fsuccess_jsp.java的158,217行贴出来

#4


展示是int到jsl中变string,可以自动转换。。。。获取是从页面到后台,后台从request中取到的只能是String,无法复制给int类型的id,无法自动转换

#5


后台请用String idStr来接收,然后int id = Integer.parseInt(id);

#6


引用 1 楼 QWERT4745 的回复:
贴下后台代码,还有实体类中dishes.id和数据库字段的类型是什么

这是我的Action里的代码
这段是报错的[code=java// 菜品查询的方法
public String dishQuery() {
this.dishes = this.dishService.queryDish(window);
session.put("dishlist", dishes);
List<Dish> dishs=(List<Dish>)session.get("dishlist");
System.out.println(dishs.get(1).getId()+"action");
System.out.println(dishs.get(1).getDishName()+"action");
System.out.println(dishs.get(0).getId()+"action");
System.out.println(dishs.get(0).getDishName()+"action");
return SUCCESS;
}][/code]

这段是不报错的
// 用户查询的方法
public String queryUser() {
this.users = this.userService.queryUser(user);
session.put("userlist", users);
return SUCCESS;
}

#7


引用 2 楼 sinat_37774909 的回复:
你的value="#session.dishlist"这个对象,返回的是list<dishlist>还是list<Object>额,原因应该你的这个对象返回的是Object,所以没办法用dishlist.id

返回的是List<Dish>

#8


dish_005fdishQuery_005fsuccess_jsp.java的158,217行贴出来
JSP页面上有把字符串值为"id"的,变成Integer的地方。
是jsp,jsp,jsp。

#9


先把页面上${dishes.id}的代码注释掉,排除下是dishlist类型不对还是id有问题

#10


引用 8 楼 stacksoverflow 的回复:
dish_005fdishQuery_005fsuccess_jsp.java的158,217行贴出来
JSP页面上有把字符串值为"id"的,变成Integer的地方。
是jsp,jsp,jsp。

dish_005fdishQuery_005fsuccess_jsp.java的158,217是什么呀。。。。我jsp页面上也没有217行啊。。 For input string: "id"报错

#11


你的jsp会被编译成java的servlet代码,报错在dish_005fdishQuery_005fsuccess_jsp.java的158,217
拿到这个以下就明白了。
eclipse路径和tomcat路径参照下面
https://blog.csdn.net/Gavid0124/article/details/44935793
https://blog.csdn.net/chosen0ne/article/details/5343609

#12


就是你传了个字符串“id”给了Integer,自己查查吧,我下班了。

#13


我把var=“dishes”改成var=“dishes1”就好使了。。这是什么道理啊?是堆栈里已经有dishes了吗?
For input string: "id"报错

#14


引用 12 楼 stacksoverflow 的回复:
就是你传了个字符串“id”给了Integer,自己查查吧,我下班了。

谢谢大哥

#15


引用 13 楼 weixin_39487102 的回复:
我把var=“dishes”改成var=“dishes1”就好使了。。这是什么道理啊?是堆栈里已经有dishes了吗?
For input string: "id"报错


是不是后台this.dishes也传到前台来了

#16


咋又是无满意结帖呢 For input string: "id"报错

#1


贴下后台代码,还有实体类中dishes.id和数据库字段的类型是什么

#2


你的value="#session.dishlist"这个对象,返回的是list<dishlist>还是list<Object>额,原因应该你的这个对象返回的是Object,所以没办法用dishlist.id

#3


dish_005fdishQuery_005fsuccess_jsp.java的158,217行贴出来

#4


展示是int到jsl中变string,可以自动转换。。。。获取是从页面到后台,后台从request中取到的只能是String,无法复制给int类型的id,无法自动转换

#5


后台请用String idStr来接收,然后int id = Integer.parseInt(id);

#6


引用 1 楼 QWERT4745 的回复:
贴下后台代码,还有实体类中dishes.id和数据库字段的类型是什么

这是我的Action里的代码
这段是报错的[code=java// 菜品查询的方法
public String dishQuery() {
this.dishes = this.dishService.queryDish(window);
session.put("dishlist", dishes);
List<Dish> dishs=(List<Dish>)session.get("dishlist");
System.out.println(dishs.get(1).getId()+"action");
System.out.println(dishs.get(1).getDishName()+"action");
System.out.println(dishs.get(0).getId()+"action");
System.out.println(dishs.get(0).getDishName()+"action");
return SUCCESS;
}][/code]

这段是不报错的
// 用户查询的方法
public String queryUser() {
this.users = this.userService.queryUser(user);
session.put("userlist", users);
return SUCCESS;
}

#7


引用 2 楼 sinat_37774909 的回复:
你的value="#session.dishlist"这个对象,返回的是list<dishlist>还是list<Object>额,原因应该你的这个对象返回的是Object,所以没办法用dishlist.id

返回的是List<Dish>

#8


dish_005fdishQuery_005fsuccess_jsp.java的158,217行贴出来
JSP页面上有把字符串值为"id"的,变成Integer的地方。
是jsp,jsp,jsp。

#9


先把页面上${dishes.id}的代码注释掉,排除下是dishlist类型不对还是id有问题

#10


引用 8 楼 stacksoverflow 的回复:
dish_005fdishQuery_005fsuccess_jsp.java的158,217行贴出来
JSP页面上有把字符串值为"id"的,变成Integer的地方。
是jsp,jsp,jsp。

dish_005fdishQuery_005fsuccess_jsp.java的158,217是什么呀。。。。我jsp页面上也没有217行啊。。 For input string: "id"报错

#11


你的jsp会被编译成java的servlet代码,报错在dish_005fdishQuery_005fsuccess_jsp.java的158,217
拿到这个以下就明白了。
eclipse路径和tomcat路径参照下面
https://blog.csdn.net/Gavid0124/article/details/44935793
https://blog.csdn.net/chosen0ne/article/details/5343609

#12


就是你传了个字符串“id”给了Integer,自己查查吧,我下班了。

#13


我把var=“dishes”改成var=“dishes1”就好使了。。这是什么道理啊?是堆栈里已经有dishes了吗?
For input string: "id"报错

#14


引用 12 楼 stacksoverflow 的回复:
就是你传了个字符串“id”给了Integer,自己查查吧,我下班了。

谢谢大哥

#15


引用 13 楼 weixin_39487102 的回复:
我把var=“dishes”改成var=“dishes1”就好使了。。这是什么道理啊?是堆栈里已经有dishes了吗?
For input string: "id"报错


是不是后台this.dishes也传到前台来了

#16


咋又是无满意结帖呢 For input string: "id"报错