복붙노트

[JQUERY] JSON 값을 반환 실행

JQUERY

JSON 값을 반환 실행

해결법


  1. 1.데이터 형식 : 'JSON'이 행동과 결과가 실행될 때 성공 콜백 함수에 의해 반환 것으로 예상되는 데이터 유형 및 서버에서 반환 된 응답을 지정 jQuery를 아약스에 의해 사용된다.

    데이터 형식 : 'JSON'이 행동과 결과가 실행될 때 성공 콜백 함수에 의해 반환 것으로 예상되는 데이터 유형 및 서버에서 반환 된 응답을 지정 jQuery를 아약스에 의해 사용된다.

    URL은 올바르게 행동 매핑 가리켜 야합니다. 그렇지 않으면 당신은 URL을 수정하고 네임 스페이스 속성을 추가 매핑해야한다, 그것은 기본 네임 스페이스에있을 것입니다 가정합니다.

    <script type="text/javascript">
      $(function() {
        $("#dialog-form").dialog ({
          autoOpen: true,
          height: 500,
          width: 750,
          modal: true,
          buttons : {
            "Search" : function() {
              $.ajax({
                url : '<s:url action="part" />',
                success : function(data) {
                  //var obj = $.parseJSON(data);
                  var obj = data;
                  alert(JSON.stringify(obj));
                }
              });
            }
          }
        });
      });
    </script>
    

    수동으로 된 JSONObject를 구축 할 경우 반환 JSON 결과 유형은 필요하지 않습니다. 당신은 필요한 경우 다음 JSON 문자열을 변환 스트림 결과로 텍스트를 반환 할 수 있습니다.

    struts.xml :

    <package name="default" extends="struts-default">
      <action name="part" class="action.PartAction" method="finder">    
        <result type="stream">
          <param name="contentType">text/html</param>
          <param name="inputName">stream</param>
        </result>
      </action>
    </package>
    

    동작:

    public class PartAction extends ActionSupport {
    
      public class SearchResult {
        private String col1;
        private String col2;
    
        public String getCol1() {
          return col1;
        }
    
        public void setCol1(String col1) {
          this.col1 = col1;
        }
    
        public String getCol2() {
          return col2;
        }
    
        public void setCol2(String col2) {
          this.col2 = col2;
        }
    
        public SearchResult(String col1, String col2) {
          this.col1 = col1;
          this.col2 = col2;
        }
      }
    
      private InputStream stream;
    
      //getter here
      public InputStream getStream() {
        return stream;
      }
    
      private List<SearchResult> findList = new ArrayList<>();
    
      public List<SearchResult> getFindList() {
        return findList;
      }
    
      public void setFindList(List<SearchResult> findList) {
        this.findList = findList;
      }
    
      private String list() {
        JSONObject jo = new JSONObject();
        try {
          for (SearchResult part : findList) {
            jo.put("col1", part.getCol1());
            jo.put("col2", part.getCol2());
          }
          System.out.println("--------->:"+jo.toString());
        } catch (Exception e) {
          e.printStackTrace();
          System.out.println(e.getMessage());
        }
        return jo.toString();
      }
    
      @Action(value="part", results = {
        @Result(name="stream", type="stream", params = {"contentType", "text/html", "inputName", "stream"}),
        @Result(name="stream2", type="stream", params = {"contentType", "application/json", "inputName", "stream"}),
        @Result(name="json", type="json", params={"root", "findList"})
      })
      public String finder() {
        findList.add(new SearchResult("val1", "val2"));
        stream = new ByteArrayInputStream(list().getBytes());
        return "stream2";
      }
    }
    

    더 나은 아이디어를 설명하는 결과 유형 및 내용 유형과 다른 결과를 배치했다. 이러한 결과 중 하나를 반환하고 JSON을 객체도 캐릭터 라인 여부 중 하나를 반환 할 수 있습니다. 캐릭터 라인 버전은 JSON 객체를 얻기 위해 반환 된 데이터를 분석해야합니다. 당신은 또한 당신의 요구에 맞게 직렬화 더 나은하는 결과 유형을 선택할 수 있습니다하지만 내 목표는 JSON 플러그인 후 간단한 개체를 serialize해야하는 경우가 작동하게 할 필요가 없습니다 것을 보여이었다.

    참고 :


  2. 2.Struts2 JSON 플러그인은 특정 방식으로 작동합니다 :

    Struts2 JSON 플러그인은 특정 방식으로 작동합니다 :

    그것은 JSON에 전체 동작을 직렬화 제외

    당신이 원하지 않는 경우 전체 작업 직렬화,하지만 당신의 선택의 하나의 목적은, 당신은 루트 개체를 지정할 수 있습니다 :

    그것은이 같은 struts.xml에서 수행 할 수 있습니다 :

    <result type="json">
        <param name="root">
            objectToBeSerialized
        </param>
    </result>
    

    반면에게 조치해야한다 :

    private CustomObject objectToBeSerialized;
    
    public CustomObject getObjectToBeSerialized(){
        return this.objectToBeSerialized;
    }
    

    CustomObject는 원시를 할 수있는 등 문자열, 배열, ...

    이런 식 (이 위해 구축되는 방식)를 사용하여, 당신은 어떤 같은 AJAX jQuery를 호출의 콜백 함수에서 직렬화 된 JSON 객체를 프레임 워크 규칙을 파괴하지 않고, 다른 AJAX Struts2 액션에 같은 성공 및 오류를 반환 및 액세스 할 수 있습니다 다른 필드 (rootObject를 사용하는 경우, var에 handledata = 기능 (데이터)의 "데이터"그렇지 않으면 액션 것, 당신의 객체가 될 것이다).

    귀하의 경우, 개체 구조를 가정하는 것은 다음과 같습니다

    row1 [col1, col2], 
    row2 [col1, col2], 
    rowN [col1, col2]
    

    당신은 두 개의 열을 가진 객체의 목록을 만들 수 있습니다 :

    값 개체

    public class MyRow implements Serializable {
        private static final long serialVersionUID = 1L;
    
        private String col1; 
        private String col2;
    
        // Getters
        public String getCol1(){ 
            return this.col1; 
        }
        public String getCol2(){ 
            return this.col2; 
        }
    }
    

    Action 클래스

    public class PartAction implements Serializable {
        private static final long serialVersionUID = 1L;
        
        private List<MyRow> rows;   
    
        // Getter
        public  List<MyRow> getRows() { 
            return this.rows; 
        } 
    
        public String finder() {
            String result = Action.SUCCESS;
            rows = new ArrayList<MyRow>();
    
            try {
                Iterator it = findList.iterator();
                while(it.hasNext()) {
                    SearchResult part = (SearchResult) it.next();
                    MyRow row = new MyRow();
                    row.setCol1(part.getcol1());
                    row.setCol2(part.getcol2());
                    rows.add(row);
                }
            } catch (Exception e) {
                result = Action.ERROR;
                log.error(e);
            }
            return result;
        }  
    } 
    

    Struts.xml

    <package name="default" namespace="/ajax" extends="json-default">
        <action name="finder" class="action.Part" method="finder" name="finder">
            <result type="json" >
                <param name="root">
                    rows
                </param>
            </result>
      </action>
    </package>
    

    AJAX와 콜백 함수에서 테스트하려면 $ .each를 사용합니다 :

    var handledata = function(data) {
        $.each(data, function(index) {
            alert(data[index].col1);
            alert(data[index].col2);
        });     
    }
    

    물론 대신 사용자 정의 개체, 또는 좀 더 이것보다 좋아하는 다른 개체 구조의 목록 <리스트 <문자열 >>을 사용할 수 있습니다 : 그것은 당신에게 아이디어를 얻을 만했다.

  3. from https://stackoverflow.com/questions/17093862/issue-returning-json-value by cc-by-sa and MIT license