在该demo 中围绕执行的流程来作主线,进行记录:
1. 页面上的组件元素
<mx:VBox> <mx:HBox> <s:TextInput id="add1" width="120"/> <s:Label text="+"/> <s:TextInput id="add2" width="120"/> <s:Label text="="/> <s:TextInput id="result" width="120"/> <s:Button label="submit" click="requestServer()"/> </mx:HBox> </mx:VBox>2. <s:button/>元素的click响应事件requestServer
<fx:Script> <![CDATA[ import mx.collections.ArrayCollection; import mx.rpc.events.ResultEvent; private function requestServer():void{ this.flexService.send(); } ]]> </fx:Script>注意:flexService将在下面的代码中出现
3. 声明httpService服务
<fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> <s:HTTPService id="flexService" url="flexService.action" method="POST" resultFormat="text" result="flexServiceHandler(event)"> <s:request xmlns=""> <add1>{this.add1.text}</add1> <add2>{this.add2.text}</add2> </s:request> </s:HTTPService> </fx:Declarations>注意: 1)url就是我们想调用的请求处理对象。因为在例子中用到的是struts2,所以这里命名为flexService.action,它的名称和struts.xml文件中action的名字相同。
2) resultFormat: 返回的结果类型; method:表示的请求提交方式。
3)result: 该属性标注的是处理返回结果的方法; 在flexServiceHandler(event)方法中,event参数的类型是ResultEvent,返回的结果值就封装在该对象中。
该方法在下面的代码中给出
4. 处理结果的回调函数flexServiceHandler(event)
private function flexServiceHandler(event:ResultEvent):void{ var returnedData:String = String(event.result); this.result.text =returnedData; }
2)将处理后的返回结果赋值给<s:textField/>对象。
5. 下面是服务器端的代码:
public class FlexAction extends ActionSupport{ private int add1; private int add2; public int getAdd1() { return add1; } public void setAdd1(int add1) { this.add1 = add1; } public int getAdd2() { return add2; } public void setAdd2(int add2) { this.add2 = add2; } @Override public String execute()throws Exception{ System.out.println("invoked!"); int result = add1+add2; HttpServletResponse response = ServletActionContext.getResponse(); response.setContentType("text/plain; charset=utf-8"); response.setHeader("Cache-Control", "no-cache"); PrintWriter writer = response.getWriter(); writer.print(result); writer.flush(); //writer.close(); return null; } }
2)该方法应该还可以被封装(有时间了再处理)
6. 将该struts2的action对象在struts.xml文件中注册
<package name="flexService" extends="struts-default"> <action name="flexService" class="com.test.action.FlexAction"/> </package>