flex + httpservice(Json) + struts2 的配置方式

本文介绍了一种Struts2与Flash应用整合的方法,通过自定义JSONSerialzationFilter来处理参数转换,实现了从Struts2端到Flash端的数据交互。此方案无需对Struts2做额外改动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

struts2 的参数形式为 objectName.propertyName ,如果要结合httpService, 所有的参数都要自己处理过,所有才想写成一个过滤器,将参数处理过程交给过滤器去处理,将这块封装起来,对外的感觉是操作普通的object一样。

 

 

JSONSerialzationFilter.as

 

package com.zmsoft.main.util
{
	import com.adobe.serialization.json.JSON;

	import flash.utils.describeType;
	import flash.utils.getQualifiedClassName;

	import mx.core.mx_internal;
	import mx.rpc.http.AbstractOperation;
	import mx.rpc.http.SerializationFilter;

	use namespace mx_internal;

	/**
	 * json过滤器
	 * @author dcross
	 */
	public class JSONSerialzationFilter extends SerializationFilter
	{
		// replaces/returns previous with that name or null
		static mx_internal var filterForResultFormatTable:Object=new Object();

		/**
		 * 
		 * @param resultFormat
		 * @param filter
		 * @return 
		 */
		public static function registerFilterForResultFormat(resultFormat:String, filter:JSONSerialzationFilter):JSONSerialzationFilter
		{
			var old:JSONSerialzationFilter=filterForResultFormatTable[resultFormat];
			filterForResultFormatTable[resultFormat]=filter;
			return old;
		}

		/**
		 * 返回数据过滤
		 * @param operation
		 * @param result
		 * @return 
		 */
		override public function deserializeResult(operation:AbstractOperation, result:Object):Object
		{
			if (result != null && result != "")
			{
				var resultData:String=String(result);
				var resultObj:Object=JSON.decode(resultData);
				return resultObj;
			}
			else
			{
				return result;
			}
		}

		/**
		 * 
		 * @param operation
		 * @param obj
		 * @param contentType
		 * @return 
		 */
		override public function getRequestContentType(operation:AbstractOperation, obj:Object, contentType:String):String
		{
			return contentType;
		}

		/**
		 * 参数过滤
		 * @param operation
		 * @param params
		 * @return 
		 * @throws ArgumentError
		 */
		override public function serializeParameters(operation:AbstractOperation, params:Array):Object
		{
			var argNames:Array=operation.argumentNames;

			if (params == null || params.length == 0)
				return params;

			if (argNames == null || params.length != argNames.length)
				throw new ArgumentError("HTTPMultiService operation called with " + (argNames == null ? 0 : argNames.length) + " argumentNames and " + params.length + " number of parameters.  When argumentNames is specified, it must match the number of arguments passed to the invocation");

			var obj:Object=new Object();
			for (var i:int=0; i < params.length; i++)
			{
				var className:String=getQualifiedClassName(params[i]);
				if (className.substr(0, 15) == "com.zmsoft.main")
				{ //如果传的是自己定义的类对象
					var simpleName:String=className.split("::")[1];
					var strtus2Name:String=simpleName.substr(0, 1).toLowerCase() + simpleName.substr(1);
					var xml:XML=describeType(params[i]);
					for (var j:int=0; j < xml.child("variable").length(); j++)
					{
						var name:String=xml.child("variable")[j].@name;
						if (params[i][name] != null)
						{
							obj[strtus2Name + "." + name]=params[i][name];
						}
					}
				}
				else
				{
					obj[argNames[i]]=params[i];
				}
			}
			return obj;
		}

		/**
		 * 
		 * @param operation
		 * @param obj
		 * @return 
		 */
		override public function serializeBody(operation:AbstractOperation, obj:Object):Object
		{
			return obj;
		}

		/**
		 * 
		 * @param operation
		 * @param obj
		 * @param url
		 * @return 
		 */
		override public function serializeURL(operation:AbstractOperation, obj:Object, url:String):String
		{
			return url;
		}
	}


}

 

修改服务类:_Super_XXXXService.as

 

替换原来的 JSONSerialzationFilter 为自己定义的 JSONSerialzationFilter

private static var serializer0:JSONSerialzationFilter = new JSONSerialzationFilter();

 

         operation = new Operation(null, "save");
         operation.url = "save.action";
         operation.method = "POST";
         argsArray = new Array("book");
         operation.argumentNames = argsArray;         
         operation.serializationFilter = serializer0;
         operation.contentType = "application/x-www-form-urlencoded";
		 operation.resultType = Object; 		 
         operations.push(operation);

 

如果要执行一个保存方法:

	var book:Book=new Book();
	book.name=nameInput.text;
	book.memo=memoInput.text;
	saveResult.token=bookService.save(book);

 

struts2端不需要进行任何修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值