使用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方法

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

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

  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中

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

js将参数封装到list

  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. $.post(url,params);

js将参数封装到map

  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. $.post(url,params);

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

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

struts2的action从request获取参数值的几种方式的更多相关文章

  1. MyBatis获取参数值的两种方式

    MyBatis获取参数值的两种方式:${}和#{} ${}的本质就是字符串拼接,#{}的本质就是占位符赋值 ${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单 ...

  2. Struts2 的Action中取得请求参数值的几种方法

    先看GetRequestParameterAction类代码:  Java代码 public class GetRequestParameterAction extends ActionSupport ...

  3. 在Struts2的Action中取得请求参数值的几种方法

    先看GetRequestParameterAction类代码: public class GetRequestParameterAction extends ActionSupport { priva ...

  4. Request获取Session的两种方式

    1.无请求参数 public HttpSession getSession() 获取当前request关联的session,如果当前request没有session,创建一个session. 2.有请 ...

  5. flask request 获取json内容2种方式

    # -*- coding: utf-8 -*-from flask import request, jsonify, json, Moduleimport loggingfrom web.utils. ...

  6. Struts2(四.注册时检查用户名是否存在及Action获取数据的三种方式)

    一.功能 1.用户注册页面 <%@ page language="java" contentType="text/html; charset=UTF-8" ...

  7. Action中取得request,session的四种方式

    Action中取得request,session的四种方式 在Struts2中,从Action中取得request,session的对象进行应用是开发中的必需步骤,那么如何从Action中取得这些对象 ...

  8. 【Struts2】Struts2获取session的三种方式

    1.Map<String,Object> map =  ActionContext.getContext().getSession(); 2.HttpSession session = S ...

  9. Struts2中Action取得表单数据的几种方法

    Struts2中Action取得表单数据的几种方法   Struts2中Action获得表单数据的几种方法struts2 Action获取表单传值 1.通过属性驱动式JSP: <form act ...

随机推荐

  1. 五指cms筛选功能的实现:

    筛选功能的实现: $_POST['page_urlrule'] = 'tuan-{$pinpai}-{$renqun}-{$type}-{$price}-{$area}-{$tese}-{$st}-{ ...

  2. bzoj 3197 [Sdoi2013]assassin(Hash+DP+KM)

    Description Input Output Sample Input 4 1 2 2 3 3 4 0 0 1 1 1 0 0 0 Sample Output 1 HINT [思路] Hash,D ...

  3. 5.2 CUDA Histogram直方图

    什么是Histogramming Histogramming是一种从大的数据集中提取典型特征和模式的方式. 在统计学中,直方图(英语:Histogram)是一种对数据分布情况的图形表示,是一种二维统计 ...

  4. HW6.9

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  5. Unity3D实现简单的抽奖程序

    下面是具体的代码,注意,我这里用到了NGUI这个插件.大概的原理很简单,就用了2张图片Sprite,同时向下移动,当上面一张图片移动到下面一张图片原来的位置时,就把这2张图片向上移到初始的位置.这时, ...

  6. CoreSeek中文检索引擎

    目的:安装coreseek中文检索引擎,配置MySQL数据库访问接口,使用PHP程序实现中文检索. CoreSeek官方网站: http://www.coreseek.cn/ http://www.c ...

  7. hdu5773--The All-purpose Zero(LIS变形)

    题意:给一个非负整数的数列,其中0可以变成任意整数,包括负数,求最长上升子序列的长度. 题解:LIS是最简单的DP了,但是变形之后T^T真的没想到.数据范围是10^5,只能O(nlogn)的做法,所以 ...

  8. [Objective-c 基础 - 3.4] protocol

    A.概念 1.用来声明方法(不能声明成员变量) 2.只要某个类遵守了这个协议,相当于拥有了协议中得所有方法的声明 3.属性 (1)@required:默认,要求实现,不实现就会发出警告 (2)@opt ...

  9. Altium Designer快捷键 【worldsing笔记】

    Shift + R 切换三种布线模式 (忽略, 避开或推挤) Shift + E 触发电气格点开/关 Shift + B 建立查询 Shift + PgUp 放大到最小的递增 Shift + PgDn ...

  10. C#公历转农历算法

    C#公历转农历算法,高手们也可以改写一下让其更加有效率! Code/// <summary> /// LunDay 的摘要说明. /// 用法说明 /// 直接调用即可,比较简单 /// ...