您的位置:首页 > 其它

ActionContext获取请求参数

2012-11-01 18:54 519 查看
利用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()方法获取。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: