Flex用HTTPService向后台传值的问题(初学Flex 希望帮帮忙)

jwtigerqwe 2009-11-05 12:26:55
我现在后台用struts2来拦截HTTPService的url来实现进入对应的Action,现在我在as中声明一个userInfo的对象,我现在想让它填充我后台声明的一个叫userInfo的java对象代码如下:
registAction
public class LoginAction extends ActionSupport implements ServletRequestAware,ServletResponseAware{

private User userInfo;
private HttpServletRequest request;
private HttpServletResponse response;

public void regist() throws IOException{
System.out.println("....THE DATA IS SAVED....");
PrintWriter out = response.getWriter();
JSONObject jo = new JSONObject();
jo.put("userInfo", this.userInfo);
out.write(jo.toString());
System.out.println(jo.toString());
}
// get/set方法.....
}

User的bo
public class User {
private String username;
private String password;
private int favorite;
private String email;
private String phoneNum;
//get/set方法.....
}

我现在是通过在mxml中拼接HTTPService的url实现后台java对象的填装的。代码如下(只给出了mx:srcpit的),拼装url和send我是在submit()函数中实现的:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
backgroundColor="#606266" themeColor="#F6BFBF"
creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.messaging.management.ObjectInstance;
import mx.rpc.events.ResultEvent;
import classes.UserInfo;
import flash.trace.Trace;
import com.adobe.serialization.json.JSON;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.validators.Validator;
import mx.validators.PhoneNumberValidator;

[Bindable]
private var userInfo:UserInfo = new UserInfo();
[Bindable]
private var my_url:String;
private var phoneVolidator:PhoneNumberValidator;
private var jsonObject:Object;
[Bindable]
private var collection:ArrayCollection;

//页面载入初始化参数
private function init():void{
collection = new ArrayCollection();
jsonObject = new Object();
createValidator();
}

//提交表单
private function submit():void{
my_url = "regist.action?userInfo.username=" + userInfo.username + "&userInfo.password=" + userInfo.password
+ "&userInfo.favorite=" + userInfo.favorite + "&userInfo.email=" + userInfo.email
+ "&userInfo.phoneNum=" + userInfo.phoneNum;//url的拼接 实现参数向后台的对象的填装
HttpService.send();
}

//创建效验器
private function createValidator():void{
phoneVolidator = new PhoneNumberValidator();
phoneVolidator.source = phoneNum;
phoneVolidator.property = "text";
}


//HTTPService返回结果处理
private function resultHandler(event:ResultEvent):void{
jsonObject = JSON.decode(HttpService.lastResult as String).userInfo;
jsonObject.favorite = content[jsonObject.favorite as Number];
collection.addItem(jsonObject);
}
]]>
</mx:Script>
<mx:HTTPService id="HttpService" url="{my_url}" method="POST" useProxy="false" result="resultHandler(event)">
</mx:HTTPService>
//其他内容省略......

我现在的问题是在使用HTTPService的情况下,能否实现更好的向后台传值并填装对应对象的方法,最好是直接讲这个userInfo对象直接传到后台。因为我觉得这种拼接url的方式在传递参数比较多的情况下 很不方便 希望大家多帮帮忙 提出较好的前后台数据交互的方法,最好是HTTPService,RemoteObject的也可以。只要方便有效常用就好。我初学flex,很多基础惯用的方式还不清楚。先谢谢各位了。
...全文
991 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
jwtigerqwe 2009-11-06
  • 打赏
  • 举报
回复
ok 了解了 谢谢咯
貌似 struts在amf通信的时候 没有什么用了啊....
难道RemoteObject和Struts要舍一个??
那如果我想用拦截器来作权限管理 flex的页面的请求就不受拦截了。。。。
我一个工程用struts拦截器做权限控制 如果某个页面的某一块想用flex做 那不是和整个工程的其他地方不统一了。。。不解 午饭回来后 结贴
herowach 2009-11-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jwtigerqwe 的回复:]
非常感谢你的帮忙
我想再问问 如果我现在用RemoteObject通信了
想把前后台的对象给映射起来
比如前台的userInfo和后台的userInfo
我在前台的as中 class中也写了[RemoteClass(alias="com.jw.flexApplication.model.User")]类似这样的映射标示。
那我这个时候如何传对象就能将前台的对象直接传向并填装后台的对象呢?
就举个例子吧 或者 给个好链接的网站
我分全给你了
[/Quote]
用RO是直接调用JAVA端的方法的,你已参数的形式传过去,只要你的AS的VO与JAVA的TO映射到了就会自动转换,例如:
FLEX端:romoteObject.saveUserInfo(userInfo);//saveUserInfo是JAVA端的方法,是哪个类是在romoteObject里设的,FLEX端这个时候传的是AS的userInfo,但JAVA端接收的时候,就会自动变成JAVA端的TO
JAVA端:public void saveUserInfo(UserInfo userInfo);//UserInfo是JAVA端的TO
xingjunli 2009-11-06
  • 打赏
  • 举报
回复
学习一下,没咋玩过JAVA
jv9 2009-11-06
  • 打赏
  • 举报
回复
标识一下,跟两位学习。
herowach 2009-11-05
  • 打赏
  • 举报
回复
刚刚发现你的参数名都是userInfo.XXX的形式,那放到param中的时候应该
param["userInfo.username"] = userInfo.username;
herowach 2009-11-05
  • 打赏
  • 举报
回复
但是这样只是传值,而不是传对象,传对象要用RemoteObject,需要用到LCDS,能够将FLEX的VO类和JAVA的VO类产生映射,这样才能将整个对象传到JAVA端
herowach 2009-11-05
  • 打赏
  • 举报
回复
HTTPService支持POST递交的,
HttpService.method="POSE";
var param:Object = new Object();
param.username = userInfo.username;
...
HttpService.send(param);
这样URL里就可以不带参数了
jwtigerqwe 2009-11-05
  • 打赏
  • 举报
回复
非常感谢你的帮忙
我想再问问 如果我现在用RemoteObject通信了
想把前后台的对象给映射起来
比如前台的userInfo和后台的userInfo
我在前台的as中 class中也写了[RemoteClass(alias="com.jw.flexApplication.model.User")]类似这样的映射标示。
那我这个时候如何传对象就能将前台的对象直接传向并填装后台的对象呢?
就举个例子吧 或者 给个好链接的网站
我分全给你了
herowach 2009-11-05
  • 打赏
  • 举报
回复
RemoteObject例子网上多的是,google一下就好了,不过我建议你先把HTTPService弄清楚,因为这个相当于基本的HTTP请求,不需要什么配置,而LCDS需要依赖另外的一些WAR(JAR),也有些东西需要配置,可以稍后再研究,除非是需求需要
jwtigerqwe 2009-11-05
  • 打赏
  • 举报
回复
还有个问题 就是用到RemoteObject以后,貌似Struts2对flex的拦截就没有用了。难道这2个必须舍去一个??
jwtigerqwe 2009-11-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 herowach 的回复:]
刚刚发现你的参数名都是userInfo.XXX的形式,那放到param中的时候应该
param["userInfo.username"] = userInfo.username;
[/Quote]
这个方法可行。谢谢你了。
但是我想知道用RemoteObject将前后台的对象映射的方法
不知道能否给个例子 或者 教程....谢谢了
jwtigerqwe 2009-11-05
  • 打赏
  • 举报
回复
1楼的方式我试过了
但是楼上好像没有看清我的需求
我要的是传值并且直接给后台的对象进行填装
而你给的方法 必须在后台声明一个private String username的属性 并且给出他的get/set方法。
只是填装了其中一个属性。
这样还需要在后台手动的进行填装。比直接拼接url还要麻烦。
我直接拼接url="regist.action?userInfo.username=" + userInfo.username;就相当如给后台的userInfo的对象的username属性进行自动填装。

4,328

社区成员

发帖
与我相关
我的任务
社区描述
多媒体/设计 Flex
社区管理员
  • Flex
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧