【问题标题】:Parameters not sent from flex to java参数未从 flex 发送到 java
【发布时间】:2015-04-14 11:50:45
【问题描述】:

我想使用 HTTP 服务连接 flex 和 java。

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
xmlns:s="library://ns.adobe.com/flex/spark" 
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
bcreationComplete="initApp();">
<fx:Script>
<![CDATA[
import mx.controls.Alert;

private function initApp():void {
b1.addEventListener(MouseEvent.CLICK, myEventHandler);
}

private function myEventHandler(event:Event):void {
Alert.show("An event occurred."+t1.text);

srv.send("abc");


}
]]>
</fx:Script>

<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
<s:HTTPService id="srv" url="http://localhost:8080/JavaFlex/rest/flextest">

</s:HTTPService>
</fx:Declarations>
<s:Label>
Ur message

</s:Label>
<s:TextInput id="t1"/>
<s:Button id="b1" label="Submit"   x="120" y="50">
</s:Button>
<mx:DataGrid x="220" y="150" dataProvider="{srv.lastResult}"/>
</s:Application>

我正在呼叫休息服务。调用(查找全部)方法,但未传递“msg”参数。这是我的休息服务。

@Path("/flextest")
public class chartServer {

    @GET
    @Produces({"text/plain"})       
    public String findAll(String msg) throws SQLException {
    ArrayList<Integer> temp=new ArrayList<Integer>();
    System.out.println("op is "+ msg);
    System.out.println("Rest Api invoked");
    chartData r= new chartData();
    temp=  (ArrayList<Integer>) r.data();
    System.out.println("From rest "+temp);
    return msg;
    }

}

控制台中显示的输出是 op is

为什么不显示参数?

【问题讨论】:

    标签: java actionscript-3 apache-flex


    【解决方案1】:

    问题出在这一行:

    srv.send("abc");

    根据HTTPService documentation,您需要将名称-值对的对象传递给send()。因此,您需要的是:

    var values:Object = {};
    values["msg"] = "abc";
    srv.send(values);
    

    【讨论】:

    • 谢谢。如何访问java中的值
    【解决方案2】:

    有两种方法可以将 flex 与 java 服务应用程序连接起来:HTTPServices 或 RemoteObjects。 在你的情况下,这是怎么做的:

    <?xml version="1.0" encoding="utf-8"?>
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
    bcreationComplete="initApp();">
    <fx:Script>
    <![CDATA[
    import mx.controls.Alert;
    
    private function initApp():void {
    b1.addEventListener(MouseEvent.CLICK, myEventHandler);
    }
    
    private function myEventHandler(event:Event):void {
     // you can define object to send to server here in as code
     // or in mxml httpService component in request tag
     srv.send();
    
    }
    
    private function resultHandler(event:Event):void {
    
         datagrid.dataProvider = event.result.yourServicesList;
    }
    
    private function faultHandler(event:Event):void {
    
        Alert.show("some problem :"+event.message);
    }
    
    ]]>
    </fx:Script>
    
    <fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
    <s:HTTPService id="srv" url="http://localhost:8080/JavaFlex/rest/flextest"
               useProxy="false" method="GET">
        <s:request xmlns="">
            <msg>{t1.text}</msg>
        </s:request>
        fault="faultHandler(event);"
        result="resultHandler(event)"
    </s:HTTPService>
    
    </fx:Declarations>
    <s:Label>
    Ur message
    
    </s:Label>
    <s:TextInput id="t1"/>
    <s:Button id="b1" label="Submit"   x="120" y="50">
    </s:Button>
    <mx:DataGrid id = "datagrid" x="220" y="150" />
    </s:Application>
    

    您的 Java 服务应该如下所示,从客户端接收到的对象 带有@QueryParam 注释:

    @Path("/flextest")
    public class chartServer {
    
        @GET
        @Produces({"text/plain"})       
        public String findAll(@QueryParam("msg") String msg) throws SQLException   {
        ArrayList<Integer> temp=new ArrayList<Integer>();
        System.out.println("op is "+ msg);
        System.out.println("Rest Api invoked");
        chartData r= new chartData();
        temp=  (ArrayList<Integer>) r.data();
        System.out.println("From rest "+temp);
        return msg;
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      • 2011-07-01
      • 1970-01-01
      相关资源
      最近更新 更多