2014-12-24 3 views
1

grails 컨트롤러에서 jQuery 데이터 테이블 (v 1.9)에 JSON 응답을 보내려고했지만 응답이 없습니다. 여기 grails 컨트롤러에서 jQuery 데이터 테이블로 JSON 응답을 보낼 수 없습니다.

내 컨트롤러입니다 : -

def breakHierarchy = 
{ 
    logger.info("breakHierarchy begins here"); 
    userObject = session.myBeanU; 
    userLoggedIn = userStatus.checkUserLoggedIn(userObject); 

    ArrayList<HierarchyBreakBean> mappingList; 
    JsonObject jsonResponse; 

    if(userLoggedIn) { 
     def hierarchyBreakInstance = new HierarchyBreak(params);       
     String[] divisionList = params.searsDivNumber; 
     String[] lineList = params.searsLineNumber; 
     String[] sublineList = params.searsSubLineNumber; 
     String[] classList = params.searsClass; 

     try { 
      mappingList = hierarchyBreakService.searchHierarchy(divisionList, lineList, sublineList, classList); 
      jsonResponse = hierarchyBreakService.loadData(request, response, mappingList); 
     } catch(Exception ex){ 
      logger.info("Exception in breakHierarchy: "); 
      ex.printStackTrace(); 
      hierarchyBreakInstance.errors.reject(message(code: ex.toString())); 
      render(view: "hierarchyBreak", model: [hierarchyBreakInstance: hierarchyBreakInstance]); 
      return; 
     } 
    } else { 
     redirect(action: loginError); 
    }  

    return; 
} 

이 서비스의 방법 loadData() : -

try { 
     JsonObject jsonResponse = new JsonObject(); 
     jsonResponse.addProperty("sEcho", sEcho); 
     jsonResponse.addProperty("iTotalRecords", iTotalRecords); 
     jsonResponse.addProperty("iTotalDisplayRecords", iTotalDisplayRecords); 

     Iterator<HierarchyBreakBean> it = list.iterator(); 
     while(it.hasNext()){ 
      JsonArray row = new JsonArray(); 
      record = it.next(); 
      row.add(new JsonPrimitive("<input type='checkbox' class='singleSelect' id='item' name='item' value='' />")); 
      row.add(new JsonPrimitive(record.getSearsCategoryNumber())); 
      row.add(new JsonPrimitive(record.getSearsBusNumber())); 
      row.add(new JsonPrimitive(record.getSearsDivNumber())); 
      row.add(new JsonPrimitive(record.getSearsLineNumber())); 
      row.add(new JsonPrimitive(record.getSearsSublineNumber())); 
      row.add(new JsonPrimitive(record.getSearsClassNumber())); 
      row.add(new JsonPrimitive(record.getKmartDivNumber())); 
      row.add(new JsonPrimitive(record.getKmartDeptNumber())); 
      row.add(new JsonPrimitive(record.getKmartCatGroupNumber())); 
      row.add(new JsonPrimitive(record.getKmartCatgNumber())); 
      row.add(new JsonPrimitive(record.getKmartSubCatgNumber())); 
      row.add(new JsonPrimitive(record.getOrderSystem())); 
      row.add(new JsonPrimitive(record.getSearskmartOrderSystemCode())); 
      data.add(row); 
     } 

     jsonResponse.add("aaData", data); 
     response.setContentType("application/Json"); 
     response.getWriter().print(jsonResponse); 
     return jsonResponse; 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

이것은 내가 사용하고있어 JS입니다 : -

var myTable = null; 

$("#searchButton").click(function(){  
    var url = appcontextPath + "/login/breakHierarchy"; 

    $("#row_header").show(); 
    myTable = $("#mappingTable").dataTable({"bServerSide": true, 
              "bProcessing": true, 
              "sAjaxSource": url, 
              "sPaginationType": "full_numbers", 
              "bJQueryUI": true, 
              "bDestroy": true, 
              "aaSorting": [[4,'asc']], 
              "bFilter": false,         
       "aoColumnDefs": [{"sWidth": "20%", "aTargets": [1,2,3,4,5], "sClass": "center"}, 
                  {"bSortable": false, "aTargets": [0]}] 
    }); 
}); 

"처리 중"표시 줄에 데이터 테이블이 비어있는 것으로 표시됩니다. 아무도 내가 여기에서 무엇을 놓치고 있는지 말해 줄 수 있습니까? 어떤 도움이라도 대단히 감사 할 것입니다. 감사!

+0

JS 콘솔에 약간의 오류가있을 수 있습니다. – injecteer

+0

컨트롤러에서'render jsonResponse'를 보지 못했습니다. – dsharew

+0

@injecteer 내 JS 콘솔은 깨끗합니다. –

답변

0

귀하가 작성한 액션은 사용자가 생성 한 JSON 객체에 아무런 영향을주지 않습니다. 어느 render data를 사용하거나 작업의 반환 값으로 JSON 개체를 반환 :

mappingList = hierarchyBreakService.searchHierarchy(divisionList, lineList, sublineList, classList); 
jsonResponse = hierarchyBreakService.loadData(request, response, mappingList); 
render jsonResponse 

또한 서비스 방법은 자바 틱 보인다. JSON 빌더를 사용하면 복잡성이 50 % 줄어 듭니다.

+0

죄송합니다. Grails를 처음 사용했습니다. Java에서 같은 코드를 작성하고 Spring 컨트롤러를 통해 응답을 보냈습니다. 그러나 Grails를 사용하여 응답을 보낼 수 없습니다. –

+0

업데이트를 참조하십시오 ... – injecteer

+0

render jsonResponse를 사용하여 다음 JS 오류가 발생했습니다. - Datatables 경고 : 서버의 JSON 데이터를 파싱하지 못했습니다. 이 오류는 JSON 형식 오류로 인해 발생합니다. JSON으로 렌더 jsonResponse도 사용했지만 java.lang.UnsupportedOperationException 오류가 발생했습니다. JsonObject 제발 도와주세요. –

관련 문제