spring MVC学习笔记(三) spring MVC视图与controller之间参数传递

这篇博客详细介绍了Spring MVC中视图与控制器之间的参数传递,包括使用@RequestParam、@ModelAttribute、@PathVariable注解进行普通参数和对象传递,以及通过HttpServletRequest获取参数。同时,讲解了从控制器向视图传递参数的方法,如使用Map、Model对象以及request.setAttribute()。所有示例均经过测试验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

        (一)视图向controller中传递参数。

        1.普通参数传递(int,String类型),在变量前加@RequestParam注解,也可以不加该注解。在controller中获取方式如下

@RequestMapping(value="/login")
public String login(@RequestParam("username") String username){
      System.out.println(username);
      return "loginsuccess";
}

 

        2.对象传递,使用注解@ModelAttribute,也可以不加该注解。

              对象的定义如下:

package kxd.springmvc.unicom.vo;

import java.io.Serializable;

public class User implements Serializable {
 private static final long serialVersionUID = 1L;
 private String username;
 private String password;
 public String getUsername() {
  return username;
 }
 public void setUsername(String username) {
  this.username = username;
 }
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
}

 

           jsp视图中的参数如下:

<form action="/userlogin/login" method="post" >
    <table>
     <tr>
      <td><input type="text" name="username"></td>
     </tr>
     <tr>
      <td><input type="text" name="password"></td>
     </tr>
     <tr>
      <td><input type="submit"></td>
     </tr>
    </table>
</form>


          在controller中获取参数值方式如下:

@RequestMapping(value="/login")
 public String login(@ModelAttribute("user") User user){
  System.out.println(user.getUsername());
  return "loginsuccess";
 }


        3.通过@PathVariabl注解获取路径中传递参数,实例代码如下:  

@RequestMapping(value = "/{id}/{str}")
 public ModelAndView helloWorld(@PathVariable String id, @PathVariable String str) {
     System.out.println(id);
     System.out.println(str);
     return new ModelAndView("/helloWorld");
}


        4.直接使用HttpServletRequest获取,实例代码如下:

@RequestMapping(value="/login",method = RequestMethod.GET)
public String get(HttpServletRequest request, HttpServletResponse response) {
    System.out.println(request.getParameter("username"));
    return "helloWorld";
}

        (二)controller向视图中传递参数。

          1.可以用Map<String, Object>,其键值可以在页面上用EL表达式${键值名}得到,实例代码如下:

@RequestMapping(value="/login")
  public String login(Map<String,Object> map){
 map.put("name","zhangsan");
 map.put("pwd", "000000");
 return "loginsuccess";
  }
在页面上通过${name}${pwd}取得相应的值。

          2.也可以用Model类对象来传递,有addAttribute(key, value)方法,其键值可以在页面上用EL表达式${键值名}得到。如果用addAttribute(value)这个方法,会将类型名的首字母改成小写后,作为键值名传递过去,例如"ok"在页面上用${string}得到,而一个复合类对象,如User类对象,页面上用${user}得到该对象,用${user.propertyName}得到其属性,这是用Model的一大优势。
例如,model.addAttribute(new User("my姓名","000000"));这样页面上就能用${user.username}和${user.password}打印对应属性,实例代码如下:

@RequestMapping(value="/login")
public String say(@RequestParam int id,Model model) {
     System.out.println("say");
     model.addAttribute("hello", "value");
     //使用Object的类型作为key,String-->string
     model.addAttribute("ok");
     return "hello";
}

        3.通过request.setAttribute(key,value)方式,鉴于此方式太为常见,此处不再赘述。

以上每条均经过测试通过,可放心使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值