2011-05-11 7 views
0

자바에서 플렉스 프런트 엔드로 BlazeDs.Successfully을 사용하여 값을 반환하려고합니다. 블레이즈가 연결하는 중 [객체 Asynvtoken]이 값을 가져 오는 동안 연결하는 중 자바 메소드에서 값을 가져 오지 못했습니다.대신 arrayCollection

내 플렉스 코드는 다음과 같습니다

<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 . . ."/> 

내 자바 코드는 다음과 같습니다 누구든지 해결책을 알고 있다면

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; 
    } 
} 

저를 도와주세요.

+0

내가 함께 당신의 두 개의 계정을 통합했습니다. [쿠키 기반 계정에 대한이 FAQ 항목을 읽으십시오.] (http://meta.stackexchange.com/questions/44557/why-should-i-register-my-account/44562/1228) 또한 StackOverflow가 아닙니다. 포럼; 새로운 질문이있는 경우 새로운 질문을하십시오. 질문에 더 많은 정보를 포함 시키려면 [편집]하십시오 (http://stackoverflow.com/posts/5960343/edit). 답변 한 사람들 중 한 사람과 의견을주고 받고 싶다면 답글을 남길 수 있습니다. – Will

답변

1

RPC 서비스에 대한 호출이 비동기임을 명심하십시오.

처음에 원격 기능 getUser을 호출합니다. 이 요청은 서버로 전송되며 getOperation 함수는 immediatly를 반환합니다. 이 호출의 결과는 getUser의 호출 결과가 아닌 AsyncToken 개체입니다. 토큰은 Asynchronous Completion Token design pattern의 일부입니다. 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; 
    } 
+0

고맙습니다. 비동기 호출과 관련된 정보가 있습니다.하지만 여전히 내 문제는 해결되지 않았습니다. 이제 빈 거북이를 검색하는 중 아무것도 검색하지 않고 있습니다. 내 코드에서 수행 한 오류가 있습니까? 제게 알려주십시오.이 문제를 해결하기 위해 많은 노력을하고 있습니다. 미리 감사드립니다. 라비 – ravi

+0

모든 것을 해결해 줄 것으로 기대할 수는 없습니다. 디버거를 사용하여 데이터가 수신되고 있는지 확인하고 데이터가 그리드 등에 제대로 추가되었는지 확인하십시오. –

관련 문제