首页 > 解决方案 > 调用更新数据时出现异常

问题描述

这是我编辑数据的jsp文件。

客户编辑.jsp

<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Edit</title>
</head>
<body>
<div align="center">

<h3>Edit Customer Information</h3>

</div>
<form:form id="editForm" modelAttribute="user" action="editsave"
method="post">

 <table align="center">
<tr>
<td><form:label path="customerid"></form:label></td>
<td><form:hidden path="customerid" name="customerid" id="customerid" /></td>
</tr>
<tr>
<td><form:label path="firstname">Firstname</form:label></td>
<td><form:input path="firstname" name="firstname" id="firstname" /></td>
</tr>
<tr>
<td><form:label path="lastname">Lastname</form:label></td>
<td><form:input path="lastname" name="lastname" id="lastname" /></td>
</tr>
<tr>
<td><form:label path="street">Street</form:label></td>
<td><form:input path="street" name="street" id="street" /></td>
</tr>
<tr>
<td><form:label path="city">City</form:label></td>
<td><form:input path="city" name="city" id="city" /></td>
</tr>
<tr>
<td><form:label path="province">Province</form:label></td>
<td><form:input path="province" name="province" id="province" /></td>
</tr>
<tr>
<td><form:label path="country">Country</form:label></td>
<td><form:input path="country" name="country" id="country" /></td>
</tr>
<tr>
<td><form:label path="birthday">Birthday</form:label></td>
<td><form:input path="birthday" name="birthday" id="birthday" /></td>
</tr>
<tr>
<td><form:label path="sin">SIN</form:label></td>
<td><form:input path="sin" name="sin" id="sin" /></td>
</tr>
<tr>
<td><form:label path="passport">Passport Number</form:label></td>
<td><form:input path="passport" name="passport" id="passport" /></td>
</tr>
<tr>
<td><form:label path="nationality">Nationality</form:label></td>
<td><form:input path="nationality" name="nationality" id="nationality" /></td>
</tr>
<tr>
<td><form:label path="email">Email Address</form:label></td>
<td><form:input path="email" name="email" id="email" /></td>
</tr>
<tr>
<td><form:label path="loginid"></form:label></td>
<td><form:hidden path="loginid" name="loginid" id="loginid" /></td>
</tr>
<tr>
<td><form:label path="password">Password</form:label></td>
<td><form:password path="password" name="password"
id="password" /></td>
</tr>
<tr>
<td></td>
<td><form:button id="submit" name="submit">Save</form:button></td>
</tr>
</table>
 </form:form>
</body>
</html>

和我的控制器

@Controller
public class RegisterControl {​​​
 @Autowired
 UserDao dao;

@RequestMapping(value = "/editcust/{customerid}")
public ModelAndView edit(@PathVariable int customerid, Model m) {
   User cust = dao.getCustomerById(customerid);
   ModelAndView mav = new ModelAndView("CustomerEdit");
   mav.addObject("user", cust);
   return mav;
}

 public UserService userService;
 @RequestMapping(value = "/editsave", method = RequestMethod.POST)
 public String editsave(@ModelAttribute("user") User user) {
    System.out.println("HELLOOOOO!!!!!");
    dao.update(user);
    return "redirect:/homepage";
 }
}

我得到带有数据的我的 customerEdit 表单。但是当我单击保存以更新我的数据时,我得到了异常

Failed to convert value of type 'java.lang.String' to required type 'int'; nested exception is java.lang.NumberFormatException: For input string: "editsave"]

我什至没有在控制台上打印 HELLOOOO 。

PS:我的注册表正在工作,但在更新数据时出错。

请帮忙。提前致谢。

标签: javamavenspring-mvc

解决方案


显然,您正在发送某种用户字段,该字段被声明为等于“editsave”(即字符串)的 int。

您可以将所有用户字段更改为字符串并检查(使用调试)哪个字段出现问题。

您应该确保客户端无法发送该字段的非数字类型,尽管这可能很棘手,因为您无法添加type属性,因为spring:input表单标签不支持 type 属性并且没有spring:number. 但是您可以使用 jquery 将 type="number" 属性添加到已解析的 html 中。像这样的东西:

$(".selector").attr({
    "type" : "number",
});

新异常后编辑:

您还需要将 BindingResult 添加到您的控制器方法中。如果您想验证用户对象的任何字段,您可以在其中设置错误。如果没有,你可以复制我的片段

public UserService userService;
 @RequestMapping(value = "/editsave", method = RequestMethod.POST)
 public String editsave(@ModelAttribute("user") User user, BindingResult result) {
    System.out.println("HELLOOOOO!!!!!");
    dao.update(user);
    return "redirect:/homepage";
 }

推荐阅读