Spring MVC学习之注解2

来源:互联网 发布:中国程序员数量 编辑:程序博客网 时间:2024/05/22 12:18

3.重定向和转发的区别

       转发比重定向快,重定向需要经过客户端,转发是在服务器的内部 。

       重定向可用于的场合;

       1) 重定向用于重定向到一个外部网站

       2)使用重定向避免在用户重新加载页面时再次调用同样的动作

       比如:在提交表单时,某方法会被调用,并执行相应的动作,在提交表单后重新加载转发到的页面,该方法会再次被调用,数据库会出现两条相同的记录。

      但采用重定向无法轻松的传值给目标页面,重定向的过程中Model对象会丢失。通过Flash属性提供的一种供重定向传值的方法。前提是说那个Flash属性,在SpringMVC的配置文件中有<annotation-driven />元素,还必须在方法上添加一个新的参数类型org.springframework.web.servlet.mvc.support.RedirectAttributes。redirectAttributes.addFlashAttribute("message","The product was successfully added");

4.请求参数 URL的一部分

       1)采用key = value 的形式,并用&分隔

       2)Spring MVC通过org.springframework.web.bind.annotation.RequestParam注释类型来注释方法参数。如下方法包含了一个获取请求蚕食productId值的参数,public void sendProduct(@RequestParam int productId)   PS:参数类型不一定是String类型

5.路径变量(类似于请求参数)

      和请求参数的不同在于路径变量没有key部分,只是一个值,为了使用路径变量,首先在Re去setMapping中的值属性中添加一个变量,且必须放在花括号里面,例如:定义一个名为id的路径变量

@RequestMapping(value="/product_view/{id}") 

然后在方法签名中添加同名的变量,并用@PathVariable注解注释

请求URL的id值将被复制到路径变量中,可以在请求映射中使用多个路径变量。如下:

@RequestMapping(value="/product/{id1}/{id2}")

6.@ModelAttribute注释

该注释类型访问Model实例,可以注释方法参数或方法

       1)注释方法参数,带@ModelAttribute注解的方法会将创建或输入的参数对象添加到Model对象中(若方法中没有显示的添加),如下:

       @RequestMapping(method=RequestMethod.POST)

public String submitOrder(@ModelAttribute("key"),Order order,Model model){.....} 注:如果未定义key,则使用对象名来作为键值名

       2)标注一个非请求的处理方法,被@ModelAttribute注释的方法会在每次调用该控制器类时被调用,SpringMVC在调用请求处理方法之调用@ModelAttribute注解的方法。使用@ModelAttribute注释的方法可以返回一个对象或一个void类型,若返回void则必须在方法参数中添加一个Model型的参数,并自行将实例添加到Model中,返回对象则,该对象自动添加到Model。

       例如:返回对象:

       @ModelAttribute

       public Product  addProduct(@RequestParam String productId) {  return productService.get(ProductId) ;   }

       返回void:

       @ModelAttribute

       public Product  addProduct(@RequestParam String Id,Model  model) { model.addAttribute(new Product(id));   }