ActionContext获取请求参数

利用ActionContext类完成页面与服务器之间的通信(需引入com.opensymphony.xwork2.ActionContext包)

 

通过ActionContext.getContext()得到一个ActionContext对象

例如: ActionContext   ac = ActionContext.getContext()

这个对象可以很方便地得到页面请求过来的参数,

 

页面传参可以异步也可以同步,这里主要记录通过ajax向服务器发送异步请求,这种方式记住两类参数传递:

1、json传递    2、serialize()序列化传递

这两类传参方式都可以通过ac.getParameters()方法获得请求参数,返回一个Map<String,Object>

json传递举例:(jquery实现)

$.ajax({
	type:'post',//请求方式  (相对应的是get方式)
	dataType:'json',//请求参数格式
	data:{//请求参数
		"username":"ggg",
		"password":"123"
	}//json格式的参数   key:value对
	url:'/mynamespace/myaction.action'//请求url
	success:function(data){//为请求返回成功后绑定处理函数
			do something;
	}
});

在服务端通过ac.getParameters()方法得到的Map<String,Object>,其中string就是json数据中的key,Object就是Value,但是不知道为什么如果value是String类型的话,这里对应的Object都成了String[ ]类型的数据, 即传过去的是String同样会被封装成String [ ]

我经常用一个Map来存放请求参数:

public Map<String, String> formatParamter(ActionContext ac) {
		Map<String, String> outMap = null;
		Map<String, Object> inputMap = ac.getParameters();
		if (null != inputMap) {
			outMap = new HashMap<String, String>();
		}
		Iterator<Entry<String, Object>> it = inputMap.entrySet().iterator();
		while (it.hasNext()) {
			Map.Entry<String, Object> entry = it.next();
			String key = entry.getKey();
			Object value = entry.getValue();
			//log.debug(value.getClass());
			if (value instanceof String[]) {
				String strArray = CommUtil.strJoin((String[]) value, ",");
				outMap.put(key, CommUtil.getNotNull(strArray));
				log.debug("format field[" + key + ", "
						+ CommUtil.getNotNull(strArray) + "]");
			} else {
				log.debug("非字符串数组类型");
			}
		}
		return outMap;
	}

有俩工具方法:

CommUtil.strJoin((String[]) value, ",");作用是将value字符数组转换成字符串,不同元素间用逗号连接

CommUtil.getNotNull(strArray));  作用是确保得到的参数不是NULL, 即使是个空串;

这里需要让被请求的ACTION的结果类型是JSON类型,配置文件:

<action name="initDate" class="GCSubplateAction" method="initDate">
    		<result type="json">
    			<param name="includeProperties">
    				args123.*
    			</param>
    		</result>
    	</action>


在ACTION类中设一个Map型变量,名字随便取,但要保证和上面配置文件中的一致,比如上面的args123.* ,args123就是我在ACTION类中声明的Map型变量可以使Map<String,String>也可以是Map<String,Object>

这里的Object可以是一个List,也可以是别的什么东西,这样你就可以把通过服务器处理得到的数据,传回页面上使用了,而且页面不刷新,jquery,和json技术很强大,使得 Map、json数据、数据库中的某条记录、还有javabean看上去如此相似。

序列化方式举例:(jquery实现)

$('#iq').click(function(){
   			$('#list').hide();
			if(!validateDate()){return;}
			if(!validateUser()){return;}
			var url = '/subplate/query.action';
			var param = $('#main select').serialize() 
				+ '&' + $('#main input').serialize() 
				+ '&option=query';
			$('#body').load(url,encodeURI(param));
		});


alert一下param你就知道了

他就是吧所有页面表单元素,以key=value&key1=value1&......的形式传过去,相当去在请求连接中带过去参数一样,也是用ac.getParameter()方法获取。    

你可能感兴趣的:(ActionContext获取请求参数)