2014-01-25 3 views
1

동일한 프레임 워크 버전에서 Struts2-json-plugin-2.3.16을 사용하고 있습니다. JSON에서 응답이 없습니다.JSR-RPC를 Struts 2에서 사용하는 방법

JavaScript/jQuery 기능.

var timeout; 
var request; 

function getUsers() 
{ 
    if(!request) 
    {      
     request = $.ajax({ 
      datatype:"json", 
      type: "GET", 
      contentType: "application/json; charset=utf-8", 
      url: "testJsonAction.action", 
      success: function(response) 
      { 
       var user= response.user; 
       alert(user); 
      }, 
      complete: function() 
      { 
       timeout = request = null; 
      }, 
      error: function(request, status, error) 
      { 
       if(status!=="timeout"&&status!=="abort") 
       { 
        alert(status+" : "+error); 
       } 
      } 
     }); 
     timeout = setTimeout(function() { 
      if(request) 
      { 
       request.abort(); 
       alert("The request has been timed out."); 
      } 
     }, 30000); 
    } 
} 

이 기능은 버튼을 클릭 할 때 호출됩니다.

<s:form namespace="/admin_side" action="Test" validate="true" id="dataForm" name="dataForm"> 

    <input type="button" name="btnUser" id="btnUser" value="Click" onclick="getUsers();"/> 

</s:form> 

액션 클래스 :

@Namespace("/admin_side") 
@ResultPath("/WEB-INF/content") 
@ParentPackage(value = "json-default") 
public final class TestAction extends ActionSupport { 

    private User user; 
    private static final long serialVersionUID = 1L; 

    public TestAction() { 
    } 

    @JSON(name = "user") 
    public User getUser() { 
     return user; 
    } 

    public void setUser(User user) { 
     this.user = user; 
    } 

    @Action(value = "testJsonAction", 
    results = { 
     @Result(type = "json", name = ActionSupport.SUCCESS, params = {"enableSMD", "true", "enableGZIP", "true", "excludeNullProperties", "true"})}) 
    public String executeAction() throws Exception { 
     try { 
      user = new User(); 
      user.setName("Tiny"); 
      user.setDob(new SimpleDateFormat("dd-MMM-YYYY").parse("29-Feb-2000")); 
      user.setLocation("India"); 
     } catch (ParseException ex) { 
      Logger.getLogger(TestAction.class.getName()).log(Level.SEVERE, null, ex); 
     } 

     return ActionSupport.SUCCESS; 
    } 

    @Action(value = "Test", 
    results = { 
     @Result(name = ActionSupport.SUCCESS, location = "Test.jsp"), 
     @Result(name = ActionSupport.INPUT, location = "Test.jsp")}, 
    interceptorRefs = { 
     @InterceptorRef(value = "defaultStack", params = {"params.acceptParamNames", "", "params.excludeMethods", "load", "validation.validateAnnotatedMethodOnly", "true"})}) 
    public String load() throws Exception { 
     return ActionSupport.SUCCESS; 
    } 
} 

User 클래스 :

public class User 
{ 
    private String name; 
    private Date dob; 
    private String location; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public Date getDob() { 
     return dob; 
    } 

    public void setDob(Date dob) { 
     this.dob = dob; 
    } 

    public String getLocation() { 
     return location; 
    } 

    public void setLocation(String location) { 
     this.location = location; 
    } 
} 

주어진 버튼을 클릭시 TestAction 클래스의 executeAction() 방법은, 호출하지만 난하지 않습니다 JSON 응답으로 사용자 객체. 항상 비어있는 것 같습니다.

무엇이 누락 되었습니까? Struts2-json-plugin-2.3.16 라이브러리 외에 다른 라이브러리가 필요합니까? 이 경우, http://localhost:8080/TestStruts/admin_side/testJsonAction.action에, 나는 다음과 같은 문자열을 얻을처럼 직접 링크를 사용


. 당신이 Struts2와 JSON-RPC를 사용해야 할 경우

{"methods":[],"serviceType":"JSON-RPC","serviceUrl":"\/TestStruts\/admin_side\/testJsonAction.action","version":".1"} 
+0

요청과 함께 JSON-RPC를 사용 하시겠습니까? –

+0

죄송합니다. 이해가 가지 않습니다. 나는'JSON-RPC'를 처음 보았다! – Tiny

+0

[JSON-RPC] (http://en.wikipedia.org/wiki/JSON-RPC) 요청에 대해 'enableSMD = true'가 사용되었습니다. 메서드를 실행하고 결과를 반환하는 액션에 객체를 전달할 수 있으므로 동일한 객체가 클라이언트와 서버에서 사용될 수 있으므로 모든 것이 투명하게 보입니다. –

답변

1

당신은 무엇을해야합니까 :

방법

@SMDMethod 
public User getUser() { 

    user = new User(); 
    user.setName("Tiny"); 
    user.setLocation("India"); 

    try { 
     user.setDob(new SimpleDateFormat("dd-MMM-YYYY").parse("29-Feb-2000")); 
    } catch (ParseException ex) { 
     Logger.getLogger(TestAction.class.getName()).log(Level.SEVERE, null, ex); 
    } 

    return user; 
} 
을 만들 JSON-RPC 서비스

@Action(value = "testJsonAction", 
    results = @Result(type = "json", params = {"enableSMD", "true"}), 
    interceptorRefs = @InterceptorRef(value="json", params={"enableSMD", "true"})) 
public String executeAction() throws Exception { 
    return SUCCESS; 
} 

을 반환

구성 작업

요청을하려면 JSON-RPC 클라이언트가 필요합니다. $.ajax

<s:url var="testJsonUrl" action="testJsonAction"/> 
<script type="text/javascript"> 
    $(document).ready(function(){ 
    $("#btnUser").click(function(){ 
     $.ajax({ 
     type:"POST", 
     url: "<s:property value='#testJsonUrl'/>", 
     dataType:"json",    
     data: JSON.stringify({jsonrpc:'2.0', method:'getUser', id:'jsonrpc'}), 
     contentType: "application/json-rpc; charset=utf-8", 
     success: function(response) { 
      var user= response.result; 
      alert(JSON.stringify(user)); 
     } 
     }); 
    }); 
    }); 
</script> 
+0

나는 똑같은 것을 시도했지만 응답은 항상 비어 있습니다.나는 다음 질문을하겠습니다. 그것은'JSON-RPC' 없이도 작동합니다. – Tiny

+0

오늘 아침에 코드를 작업 솔루션으로 업데이트했지만'User' 초기화와 관련된'ParseException'을 확인하지 않았습니다. –

+0

구문 분석 예외가 발생하지 않습니다. 이 문자열을 응답으로 받아들입니다. {{ "methods": [{ "name": "getUser", "parameters": []}], "serviceType": "JSON-RPC", "serviceUrl": " TestStruts \/admin_side \ /testJsonAction.action ","version ":".1 "}"을 검색 할 수 있습니다. – Tiny