让JSON请求和参数请求一样,可以通过Struts2的模型驱动给Action的类成员变量赋值(字段驱动与模型驱动)
2010-07-11 13:26
519 查看
自己定义一个拦截器:
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.soumall.admin.utils.JsonUtils;
import java.util.HashMap;
import java.util.Map;
public class JSONParamReadInterceptor extends AbstractInterceptor {
private static final String jsonParamData = "jsonRequestParameter";
@Override
public String intercept(ActionInvocation invocation) throws Exception {
ActionContext ctx = ActionContext.getContext();
Map<String,Object> requestParam = ctx.getParameters();
boolean excuteFlag = false;
if(requestParam!=null){
String[] jsonParamObj = (String[])requestParam.get(jsonParamData);
if(jsonParamObj!=null && jsonParamObj.length>0){
String jsonParamObjStr = (String)(jsonParamObj[0]);
requestParam = JsonUtils.json2Map(jsonParamObjStr,requestParam,null,null);
if(requestParam!=null && requestParam.size()>0){
excuteFlag = true;
for(Object key : requestParam.keySet()){
System.out.print(" key: "+key);
System.out.println(" value: "+requestParam.get(key));
}
}
}
}
if(!excuteFlag ){
System.out.println("No JSON Paramter Or JSON paramter's name have error");
}
return invocation.invoke();
}
}
/**
* 把JSONObject中的数据填充到Map中.
*
* @param <T> Object
* @param jsonObjectStr json字符串
* @param entity 需要填充数据的node
* @param excludes 不需要转换的属性数组
* @param datePattern 日期转换模式
* @return T
* @throws Exception java.lang.InstantiationException,
* java.beans.IntrospectionException,
* java.lang.IllegalAccessException
*/
public static Map<String,Object> json2Map(String jsonObjectStr,
Map<String,Object> map, String[] excludes, String datePattern)
throws Exception {
JSONObject jsonObject = JSONObject.fromObject(jsonObjectStr);
// JsonUtils.configJson(excludes, datePattern);
Set<String> excludeSet = createExcludeSet(excludes);
for (Object object : jsonObject.entrySet()) {
Map.Entry entry = (Map.Entry) object;
String propertyName = entry.getKey().toString();
if (excludeSet.contains(propertyName)) {
continue;
}
String propertyValue = entry.getValue().toString();
map.put(propertyName, propertyValue);
}
return map;
}
2,修改配置文件struts-default.xml
<!-- JSON parm Driver-->
<interceptor name="jsonParamDriven" class="com.soumall.admin.interceptor.JSONParamReadInterceptor"/>
<!-- JSON parm Driver-->
<interceptor-ref name="jsonParamDriven"/>
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.soumall.admin.utils.JsonUtils;
import java.util.HashMap;
import java.util.Map;
public class JSONParamReadInterceptor extends AbstractInterceptor {
private static final String jsonParamData = "jsonRequestParameter";
@Override
public String intercept(ActionInvocation invocation) throws Exception {
ActionContext ctx = ActionContext.getContext();
Map<String,Object> requestParam = ctx.getParameters();
boolean excuteFlag = false;
if(requestParam!=null){
String[] jsonParamObj = (String[])requestParam.get(jsonParamData);
if(jsonParamObj!=null && jsonParamObj.length>0){
String jsonParamObjStr = (String)(jsonParamObj[0]);
requestParam = JsonUtils.json2Map(jsonParamObjStr,requestParam,null,null);
if(requestParam!=null && requestParam.size()>0){
excuteFlag = true;
for(Object key : requestParam.keySet()){
System.out.print(" key: "+key);
System.out.println(" value: "+requestParam.get(key));
}
}
}
}
if(!excuteFlag ){
System.out.println("No JSON Paramter Or JSON paramter's name have error");
}
return invocation.invoke();
}
}
/**
* 把JSONObject中的数据填充到Map中.
*
* @param <T> Object
* @param jsonObjectStr json字符串
* @param entity 需要填充数据的node
* @param excludes 不需要转换的属性数组
* @param datePattern 日期转换模式
* @return T
* @throws Exception java.lang.InstantiationException,
* java.beans.IntrospectionException,
* java.lang.IllegalAccessException
*/
public static Map<String,Object> json2Map(String jsonObjectStr,
Map<String,Object> map, String[] excludes, String datePattern)
throws Exception {
JSONObject jsonObject = JSONObject.fromObject(jsonObjectStr);
// JsonUtils.configJson(excludes, datePattern);
Set<String> excludeSet = createExcludeSet(excludes);
for (Object object : jsonObject.entrySet()) {
Map.Entry entry = (Map.Entry) object;
String propertyName = entry.getKey().toString();
if (excludeSet.contains(propertyName)) {
continue;
}
String propertyValue = entry.getValue().toString();
map.put(propertyName, propertyValue);
}
return map;
}
2,修改配置文件struts-default.xml
<!-- JSON parm Driver-->
<interceptor name="jsonParamDriven" class="com.soumall.admin.interceptor.JSONParamReadInterceptor"/>
<!-- JSON parm Driver-->
<interceptor-ref name="jsonParamDriven"/>
相关文章推荐
- struts2结合json时,action的对象字段无法赋值的原因
- Struts2学习之Action接收参数方法二(用DomainModel接收参数(模型驱动))
- struts2新增json返回类型,自动将action中的的成员变量转换成json字符串
- Spring MVC如何接收浏览器传递来的请求参数--request--形参--实体类封装(类比Struts2模型驱动)
- [struts2.x] 探索struts值栈如何赋值给action成员变量
- 【struts2】【4】通过ajax向struts2 action请求json
- struts2 模型驱动Action属性 -标签 -Action属性不能赋值。
- Hibernate通过什么方法可以把私有成员变量赋值成数据库查询到的值然后返回POJO对象呢?
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- Struts2学习之Action接收参数方法一(属性接收参数(属性驱动))
- Struts2的请求转发和为Action属性赋值
- 在Struts2拦截器中获取请求action名称及参数
- day28_struts2(全天)のPPT学习——05 Action接受请求参数.ppt
- jsp页面通过 request对象直接获取 struts2 Action的变量的值。
- Struts2系统学习(7)Action中取得请求参数的方法总结
- SpringMVC中使用Ajax POST请求以json格式传递参数服务端通过request.getParameter("name")无法获取参数值问题分析
- js通过ajax发送请求赋值全局变量
- Java编程中,子类可以用用这种方法给继承父类的成员变量赋值么?
- Struts2的action接受请求参数的几种方法
- struts2 action中成员变量的生存周期