注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

obsolete

wanna go

 
 
 

日志

 
 

springmvc 参数传递  

2014-08-15 23:36:36|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1、页面向controller传值

a、普通参数:
       表单提交,POST方法
@RequestMapping(value="login",method=RequestMethod.POST)
public String login(String username,String password){
/*
 * to do
 */
return "user";
}

       表单,或URL ?username=xxxx 提交
       ?username=成为url的一部分,没有参数会报错,要允许无参数时去掉@RequestParam("username")
        @RequestMapping("/test")
public String testMethod(@RequestParam("username") String username,Map<String,Object> context){
context.put("message",username); //map的值存在request中,页面使用
return "atest";
}

b、对象参数:

        页面提数user对象数据:
@RequestMapping(value="/add",method= RequestMethod.POST)
public String add(@ModelAttribute("user") User user){
/*
                *  to do
                */
return "redirect:/user/users";
}

       页面:
    <form action="add" method="POST">
    <input name="id"><br/>
    <input name="name"><br/>
    <input name="password"><br/>
    <input name="nickname"><br/>
    <input name="email"><br/>
    <input type="submit" value="添加">
    </form>

   注意:页面input中id,name...直接对应contorller add方法参数user对象的属性字段,而不是像struts2中在页面用user.id, user.name

c、rest风格参数传递
        如:http://localhost:8080/springmvc/user/jack  , 需要把jack作为参数传递,使用value = "/{name}" ,@PathVariable
@RequestMapping(value = "/{name}", method = RequestMethod.GET)
public String show(@PathVariable String name, Model model) {
/*
               * to do
               */
return "show";
}

2、contoller处理完后,保存值页面使用

1)方法中加Map<String,Object> 参数
2)方法中加Model model参数(SpringMVC提倡的方法)
@RequestMapping(value = "/users", method = RequestMethod.GET)
public String list(Model model) {
model.addAttribute("users", users);
return "list";
}

3)contoller中使用session
方法中加HttpSession即可


springController:

  1. @Controller  
  2. @RequestMapping("/user")  
  3. public UserController extends BaseController{  
  4.     @RequestMapping("/addUser")    
  5.     public void testBinderOuput(@ModelAttribute User user, HttpServletRequest request, HttpServletResponse response){    
  6.         System.out.println(user);    
  7.     }   
  8. }  

Use对象:
  1. public Class User{  
  2.     private String name;      
  3.     private int sex;      
  4.     private String address;  
  5.     private int id;  
  6.     public int getSex() {  
  7.         return sex;  
  8.     }  
  9.     public void setSex(int sex) {  
  10.         this.sex = sex;  
  11.     }  
  12.     public String getAddress() {  
  13.         return address;  
  14.     }  
  15.     public void setAddress(String address) {  
  16.         this.address = address;  
  17.     }  
  18.     public int getId() {  
  19.         return id;  
  20.     }  
  21.     public void setId(int id) {  
  22.         this.id = id;  
  23.     }  
  24.     public void setName(String name) {  
  25.         this.name = name;  
  26.     }  
  27. }  

请求路径:
localhost/user/addUser?user.name="test"
那么在后台接受到的参数中,user对象的name属性是null。如果路径换为localhost/user/addUser?name="test",则user对象的name属性是test。
这里必须用name="test"而不是user.name="test",因为默认情况下springMVC是不支持user.name这种传参方式的。

如果有个对象manager中也有name这个相同的属性,那么可以采用user.name,manager.name来传输参数。但是这个需要在controller中添加一个前缀绑定:

添加绑定前缀后的controller类如下:

  1. @Controller  
  2. @RequestMapping("/user")  
  3. public UserController extends BaseController{  
  4.       
  5.     @InitBinder("manager")    
  6.     public void initBinder1(WebDataBinder binder) {    
  7.             binder.setFieldDefaultPrefix("manager.");    
  8.     }    
  9.     @InitBinder("user")    
  10.     public void initBinder2(WebDataBinder binder) {    
  11.             binder.setFieldDefaultPrefix("user.");    
  12.     }    
  13.     @RequestMapping("/addUser")    
  14.     public void testBinderOuput(@ModelAttribute User user, HttpServletRequest request, HttpServletResponse response){    
  15.         System.out.println(user.getName);    
  16.     }   
  17.     @RequestMapping("/addManager")    
  18.     public void testBinderOuput(@ModelAttribute Manager manager, HttpServletRequest request, HttpServletResponse response){    
  19.         System.out.println(manager.getName);    
  20.     }   
  21. }  
这样在使用连接localhost/user/addUser?user.name="test",去请求时,后台拿到的name的参数就不为null了。
  评论这张
 
阅读(787)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018