вместо arrayCollection - PullRequest
       30

вместо arrayCollection

0 голосов
/ 11 мая 2011

Я пытаюсь вернуть значения из Java во Flex-интерфейс с помощью BlazeDs.Successful Blazeds подключается при получении значений, которые он показывает [объект Asynvtoken] не получает значения из метода Java.

Мой гибкий код:

<fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.controls.Alert;
            import mx.rpc.AsyncToken;
            import mx.rpc.events.FaultEvent;
            import mx.rpc.events.ResultEvent;

            public function get_user():void
            {
                var token:AsyncToken = ro.getOperation('getUser').send();
                user_grid.dataProvider = token.toString();
                Alert.show(user_grid.dataProvider.toString());
            }
            private function fault(e:FaultEvent):void
            {
                Alert.show("code:\n" + e.fault.faultCode  + "\n\nMessage:\n" + e.fault.faultString + "\n\nDetail:\n" + e.fault.faultDetail);
            }
            private function result(e:ResultEvent):void
            {
                userbtn.visible = false;
                lnkbtn.visible = true;
            }
        ]]>
    </fx:Script>

    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
        <s:RemoteObject id="ro"
                        source="com.freelancer.GetUser"
                        fault="fault(event)"
                        destination="BlazeDsService">
            <s:method name="getUser"
                      result="result(event)"/>
        </s:RemoteObject>
    </fx:Declarations>

        <mx:DataGrid id="user_grid" x="-1" y="-1" width="705" height="356">
            <mx:columns>
                <mx:DataGridColumn headerText="Id" dataField="id"/>
                <mx:DataGridColumn headerText="Name" dataField="name"/>
                <mx:DataGridColumn headerText="Password" dataField="pwd"/>
            </mx:columns>
        </mx:DataGrid>      

    <s:Button x="322" y="429" id="userbtn" label="Get User" width="98" 
              height="23" cornerRadius="10" click="get_user()"/>
    <mx:LinkButton x="331" y="429" id="lnkbtn" visible="false" label="Connected Please Wait Loading . . ."/>

Мой код Java:

public class GetUser
{
    public static void main(String[] argv) 
    {
        System.out.println("-------- PostgreSQL " +
                "JDBC Connection Testing ----------");
        getUser();
    }
    public static List<User> getUser()
    {
         List<User> ls=new ArrayList<User>();   
         String host = "test";
            String port = "1234";
            String dbName = "test";
        Connection connection = null;
        try 
        {
            connection = DriverManager.getConnection(
                    "jdbc:postgresql://" + host + ":" + port + "/" + dbName,"user", "user");

            System.out.println("Database is connected");    

         String strSQL = "select * from test";
         Statement st = connection.createStatement();
         ResultSet rs=st.executeQuery(strSQL);
         System.out.println("hi,query executed");
         while(rs.next())
         {
             User user = new User();
             user.setId(rs.getInt("id"));
             user.setName(rs.getString("name"));
             user.setPwd(rs.getString("pwd"));
             ls.add(user);
         }
        }
        catch(Exception e)
        {
            System.out.println();
        }
        finally
        {
            try
            {
                connection.close();
            }
            catch (Exception ignored) 
            {

            }
        }
         return ls;
    }
}

Пожалуйста, помогите мне, если кто-нибудь знает решение.

1 Ответ

1 голос
/ 11 мая 2011

Имейте в виду, что вызовы служб RPC являются асинхронными.

Сначала вы вызываете удаленную функцию getUser. Этот запрос отправляется на сервер, и функция getOperation немедленно возвращается. Результатом этого вызова является AsyncToken объект, который не является результатом вызова getUser. Маркер является частью шаблона проектирования Асинхронное завершение токена . После того, как функция RPC вернется, ваш клиент получит ответ в обработчике результатов, который является вашей объявленной функцией result. Результат является частью параметра ResultEvent.

Так должно работать следующее:

    public function get_user():void
    {
        var token:AsyncToken = ro.getOperation('getUser').send();
    }

    private function result(e:ResultEvent):void
    {
        user_grid.dataProvider = e.result;     
        userbtn.visible = false;
        lnkbtn.visible = true;
    }
...