关于SpringMVC里的@ModelAttribute的用法

发布于 2021-11-28 20:12:45 字数 3841 浏览 929 评论 7

 

我想从控制器保存一组数据到数据库,用@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>&nbsp;</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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

倚栏听风 2021-12-05 06:02:27

如果我没猜错的话,应该是这样:

@ModelAttribute // 不给别名,默认是返回的类型的名称

public Emp xxx(Emp emp) {

    return emp;

}

@POSTMappin

public String saveEmp(@ModelAttribtue("emp") Emp emp) { // 默认就直接能用了

    xxxxxxxxx

}

别再吹冷风 2021-12-05 04:27:59

接受表单提交的是 POST

墨洒年华 2021-12-05 03:03:58

难道楼主换图了,method="get"啊

已下线请稍等 2021-12-04 21:27:30

回复
上面的表单的确是get,下面的表单是post

各自安好 2021-12-04 17:31:22

那个注解有两种用法,一种放在方法上,一种放在参数上。我最讨厌记SpringMVC这么多注解。回到正题,我大概看了下,你的表单是post提交,而方法是get获取,对不上啊

好听的两个字的网名 2021-12-02 22:13:22

action地址写错啦

甜柠檬 2021-12-01 12:51:51

建议楼主不要再使用石器时代的开发方式,做前后端分离

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文