关于SpringMVC里的@ModelAttribute的用法
我想从控制器保存一组数据到数据库,用@ModelAttribute来获取jsp里对象的值,贴下controller代码。
这是用@ModelAttribute做的,和在网上找到建议做的
@RequestMapping(value="/save",method = RequestMethod.GET)
public String saveEmp(@ModelAttribute("emp")Emp emp,BindingResult result){
empService.saveEmp(emp);
return "redirect:/ShowSaveEmp";
}
@RequestMapping(value="/save",method = RequestMethod.GET)
public String saveEmp(Model model){
Emp emp=new Emp();
model.addAttribute("emp",emp);
empService.saveEmp(emp);
return "redirect:/ShowSaveEmp";
jsp表单代码:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<form action="emp/fordeptno.html" method="get" name="form1">
根据部门编号查询员工:<input type="text" name="deptno">
<input type="submit" value="查询">
</form>
<br>
<form:form action="emp/save.html" modelAttribute="emp" method="post">
添加新员工:<br>
<table>
<tr>
<td><form:label path="empno">employee's id:</form:label></td>
<td><form:input path="empno" value="${emp.empno}"/></td>
</tr>
<tr>
<td><form:label path="deptno">An employee's Department:</form:label></td>
<td><form:input path="deptno" value="${emp.deptno}"/></td>
</tr>
<tr>
<td><form:label path="ename">name:</form:label></td>
<td><form:input path="ename" value="${emp.ename}"/></td>
</tr>
<tr>
<td><form:label path="job">job:</form:label></td>
<td><form:input path="job" value="${emp.job}"/></td>
</tr>
<tr>
<td><form:label path="hireDate">hire date:</form:label></td>
<td><form:input path="hireDate" value="${emp.hireDate}"/></td>
</tr>
<tr>
<td><form:label path="sal">salary:</form:label></td>
<td><form:input path="sal" value="${emp.sal}"/></td>
</tr>
<tr>
<td> </td><!-- 空格。。 -->
<td><input type="submit" value="添加"/></td>
</tr>
</table>
</form:form>
<a href="emp/save.html">添加新员工</a>
</body>
</html>
这两种Controller一直都报同样的错误
Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'emp' available as request attribute
at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141)
这是怎么回事,要怎么做才不会报这错误
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
如果我没猜错的话,应该是这样:
@ModelAttribute // 不给别名,默认是返回的类型的名称
public Emp xxx(Emp emp) {
return emp;
}
@POSTMappin
public String saveEmp(@ModelAttribtue("emp") Emp emp) { // 默认就直接能用了
xxxxxxxxx
}
接受表单提交的是 POST
难道楼主换图了,method="get"啊
回复
上面的表单的确是get,下面的表单是post
那个注解有两种用法,一种放在方法上,一种放在参数上。我最讨厌记SpringMVC这么多注解。回到正题,我大概看了下,你的表单是post提交,而方法是get获取,对不上啊
action地址写错啦
建议楼主不要再使用石器时代的开发方式,做前后端分离