SpringMVC----RESTful的增删改查

 

   2.2 目标方法。通过@RequestMapping("/emps")来确定处理什么请求。在目标方法中

                                将数据库查到的数据放入map中,然后springMVC会将其放入request域对象中。

                                视图解析器,会通过解析返回值,转发到指定的目标页面。
 

@Controller
public class EmployeeHandler {
 
	@Autowired
	private EmployeeDao employeeDao;
 
	@RequestMapping("/emps")
	public String list(Map map) {
		map.put("employees", employeeDao.getAll());
		return "list";
	}
}

3.RESTful 添加操作

  3.1 需求:显示添加页面。然后点击提交按钮,显示全部员工信息页面,完成添加操作。

                    注意:①两个页面的URL都是emp。但是请求方式不同

                               ②添加页面的department初始化时是有数据的,这就意味着在到达该添加页面的时候,必须经过

                                   handler的方法去查找出数据,然后回显到该页面。(也就是说,初始化的时候该页面的下拉列表

                                   必须有值)。

 

3.2 GET请求获取添加员工的页面信息

<a href="emp">Add New Employee</a>


3.3 Handler处理请求,目标方法。页面需要回显departments的值,因此在初始化的时候,需要放入request中。

      同时,因为SpringMVC的表单的需求在request放入一个表单对应的bean对象。

/**
 *@RequestMapping确定该目标方法处理哪个请求,之所以用两个限定条件,
 * 是因为会存在URL相同的情况。
  */
@RequestMapping(value="/emp",method=RequestMethod.GET)
public String input(Map<String,Object> map){
	map.put("departments", departmentDao.getDepartments());
	map.put("employee",new Employee());
       return "input";
}

3.4 添加页面

 <!-- 
        可以通过 modelAttribute 属性指定绑定的模型属性,若没有指定该属性,则默认从 request 域对象中读取
        command 的表单 bean,如果该属性值也不存在,则会发生错误。
         (也就是说,SpringMVC无论是不是第一次加载该页面,都需要进行页面的回显,这就需要在request域
          对象中必须存在一个对应表单字段的bean对象,如果没有指定的话,会默认的去读取command 的表单 bean
           如果也没有,则报错,这就要求,在请求该页面的时候,需要在request域对象中放入一个bean)
         -->
       <form:form action="emp"  method="POST" modelAttribute="employee">
               LastName: <form:input path="lastName"/>
               <br>
               Emali: <form:input path="email"/>
               <br>
               <%
                   Map<String,String> genders = new HashMap();
                  genders.put("1","Male");
                  genders.put("0","Female");
                  request.setAttribute("genders", genders);
               %>
               <!-- 此时不用再去写itemLabele和itemValue,会自定解析 -->
               Gender: <form:radiobuttons path="gender" items="${genders}" />
               <br>
               <!-- 直接从域对象中获取,因为在get这个页面时,departments已经放入到 域对象中-->
               Department: <form:select path="department.id" items="${departments}"  
                                    itemLabel="departmentName"  itemValue="id"></form:select>
                 <br>
                <input type="submit" value="Submit"> 
       </form:form>

3.5 发送POST请求,执行添加操作。目标方法执行重定向操作,到最初的全部员工显示页面。

@RequestMapping(value="/emp",method=RequestMethod.POST)
public String save(Employee employee){
	employeeDao.save(employee);
       return "redirect:/emps";
}

4. 删除操作

 

  4.2  发送删除请求。

<td><a  class="delete" href="emp/${emp.id}">Delete</a></td>

  但是需要注意,需求要求通过DELETE的方式删除,这样就需要把普通的超链接的GET请求方式,先转化

         为POST请求,在把POST请求转化为DELETE请求。如下点击超链接,触发click事件,取消原来的GET请求,

        代替为通过form发送POST请求,其中涉及到静态资源的获取。

 <!-- 想要使用restful发送delete请求,必须发送的是post,配置的HiddenHttpMethodFilter 
在可以把post请求转化为delete或put请求,但是一般的超链接都是get请求,就需要用到js-->
<td><a  class="delete" href="emp/${emp.id}">Delete</a></td>
<form action="" method="post">
        <input type="hidden" name="_method"  value="DELETE">
  </form>
<script type="text/javascript" src="scripts/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
	$(function() {
		$(".delete").click(function() {
			var href = $(this).attr("href");
			$("form").attr("action", href).submit();		
			return false;
		}
		);
	})
</script>

4.3  调用目标方法,注意@RequestMapping中是DELETE请求。通过@PathVariable注解获取URL中的占位符。

       删除后,重定向到目标页面。

 @RequestMapping(value="/emp/{id}",method=RequestMethod.DELETE)
public String delete(@PathVariable("id") Integer id){
    employeeDao.delete(id);
       return "redirect:/emps";
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值