zoukankan      html  css  js  c++  java
  • struts2的action从request获取参数值的几种方式

    使用jquery框架的ajax能够方便的向后台传递参数,以$.post为例,参数有2种方式字符串和键值对:$.post(url, "name=aty&age=25")和$.post(url, {"name":"aty","age":25})。

    显然,使用json的方式比使用字符串拼接要方便。对于后台的action来说,这2种方式是等价的,而且jquery也提供了param、serialize、serialize能够实现json与url格参数字符串的转换。我们主要看下action如何接收http请求中的参数值。我们以http://127.0.0.1:8080/demo/index.jsp?name=aty&age=20为例,struts2的action中获取请求参数值,总的来说

    也有2种方式:第一种在action中定义同名变量,提供get/set方法

    [java]
    1. public class DemoAction  
    2. {  
    3.     private String name;  
    4.     private int age;  
    5.       
    6.     public String getName()  
    7.     {  
    8.         return this.name;  
    9.     }  
    10.       
    11.     public void setName(String name)  
    12.     {  
    13.         this.name = name;  
    14.     }  
    15.       
    16.     public int getAge()  
    17.     {  
    18.         return this.age;  
    19.     }  
    20.       
    21.     public void setName(int age)  
    22.     {  
    23.         this.age = age;  
    24.     }  
    25. }  

    第二种方式是手动获取HttpServletRequest,然后调用request.getParameter()

    [java]
    1. public class DemoAction  
    2. {     
    3.     public String execute()  
    4.     {  
    5.         HttpServletRequest request = ServletActionContext.getRequest();  
    6.         String name = request.getParameter("name");  
    7.         String age = request.getParameter("age");  
    8.     }  
    9. }  

    这2种方式有什么差别呢?很显然是成员变量和局部变量的区别。我们知道一个action可以定义多个public方法,用来处理不同的前台请求。如果同一个请求参数,会被多个方法使用,那么就适合用第一种方式;如果一个请求参数,仅仅只会被一个方法使用,就适合使用第二种方式。原则就是:保证同一个参数名称在action代码中只出现一次(避免重复),而且变量的作用范围要尽可能的小(代码内聚)。

    将http请求参数封装到实体类的方式,可以参考struts2的模型驱动http://blog.csdn.net/li_tengfei/article/details/6098145。下面我们看下,如何将参数封装到Map和List中

    [java]
    1. public class DemoAction  
    2. {     
    3.     private Map<String,String> requestMap = new HashMap<String,String>();  
    4.       
    5.     private List<User> requestList = new ArrayList<User>();  
    6.       
    7. }  

    js将参数封装到list

    [javascript]
    1. var params = {};  
    2. params["requestList[0].id"] = $("#person_id").attr("value");  
    3. params["requestList[0].username"] = "aty";  
    4. params["requestList[0].password"] = "123";  
    5. params["requestList[0].age"] = 25;  
    6. params["requestList[0].address"] = "";  
    7.   
    8. $.post(url,params);  

    js将参数封装到map

    [javascript]
    1. var params = {};  
    2. params["requestMap.id"] = $("#person_id").attr("value");  
    3. params["requestMap.username"] = "aty";  
    4. params["requestMap.password"] = "123";  
    5. params["requestMap.age"] = 25;  
    6. params["requestMap.address"] = "";  
    7.   
    8. $.post(url,params);  

    可以看到使用Map接收http请求参数, 和使用实体类没有差别,在js和java端的做法也都是相同的。

    参见:http://blog.csdn.net/aitangyong/article/details/39081243

  • 相关阅读:
    图的拓扑排序
    线段树+主席树笔记
    树链剖分笔记
    二分图匹配笔记
    最小生成树笔记
    多个storyboard开发应用程序,封装.bundle和.a不用xib使用storyboard!!!
    Storyboard的使用以及使用多个Storyboard的方法
    IOS源码封装成.bundle和.a文件,以及加入xib的具体方法,翻遍网络,仅此一家完美翻译!! IOS7!!(3) 完美结局
    IOS源码封装成.bundle和.a文件,以及加入xib的具体方法,翻遍网络,仅此一家完美翻译!! IOS7!!(2)
    IOS源码封装成.bundle和.a文件,以及加入xib的具体方法,翻遍网络,仅此一家完美翻译!! IOS7!!(1)
  • 原文地址:https://www.cnblogs.com/moonandstar08/p/5388969.html
Copyright © 2011-2022 走看看