2017-10-07 14 views
2

리스트 결과를 렌더링 할 때 grails가리스트를 렌더링 할 수 없습니까? 여기 내 코드Grails 3 JSON 렌더가 List를 렌더링 할 수 없습니까?

def findSome(){ 
    String query = params?.some 
    List<Some> someList = Some.createCriteria().list(max : 5) { 
     if(query != null && query != ""){ 
      and { 
       like("name", query) 
      } 
     } 

     order("name", "asc") 
    } 
    someList = someList == null ? new ArrayList<Some>() : someList 

    ->> render someList as JSON 
} 

내 코드에 문제가 있습니까? 내가 기억하는 것은 grails CAN이 객체의 List를 렌더링 할 수 있다는 것이다. 이 코드를 사용하면 항상 ->> 표시 줄에 null을 반환합니다.

+0

렌더링 전에'에 println someList'의 출력은 무엇입니까? –

답변

3

쿼리 개체 목록, 당신은 오는 당신이 당신의 기준에서 얻는 결과 이후를 렌더링 someList를 JSONArray으로 사용합니다. JSON으로 렌더링하려면 목록에 해당 키 값 쌍이 있어야합니다. someList를 키 - 값 쌍의 맵으로 변환하고 JSON 객체를 실제로 원한다면 JSON으로 렌더링하는 것이 좋습니다.

def findSome(){ 
String query = params?.some 
List<Some> someList = Some.createCriteria().list(max : 5) { 
    if(query != null && query != ""){ 
     and { 
      like("name", query) 
     } 
    } 

    order("name", "asc") 
} 
someList = someList == null ? new ArrayList<Some>() : someList 

render someList as JSONArray 

}

당신이 JSON은 다음 코드를 사용 렌더링 할 경우 :

def findSome(){ 
def someMap=[:] 
String query = params?.some 
List<Some> someList = Some.createCriteria().list(max : 5) { 
    if(query != null && query != ""){ 
     and { 
      like("name", query) 
     } 
    } 

    order("name", "asc") 
} 
someList = someList == null ? new ArrayList<Some>() : someList 
someList.each{ 
    someMap.put(it.id,it) 
} 
render someMap as JSON 

}

0

조건을 벗어난 쿼리를 테스트하도록 이동해야합니다. 쿼리가 아무것도 아닌 경우에는 아무 것도 생성하지 않습니다. 당신은 또한 당신의 기준 쿼리에서 eq ("name", query)를 사용할 수 있습니다.

같은 경우와 같음은 동일합니다.

+0

쿼리에 % 어딘가가없는 한 .... – billjamesdev

+0

나는 당신이 말한 것을 시도했습니다. findAll() 및 개체가 null이 아닌 참조하십시오. 그러나이 컨트롤러는 에러보기에서'['를 사용하여 항상 null 예외를 반환합니다. 나는이 JSON 변환기에 어떤 일이 일어나는지 전혀 모른다. – dadang1234

0

예, grails는 객체 목록을 렌더링 할 수 있습니다. 귀하의 질의에 대해, 당신은 이와 같은 것으로 단순화 할 수 있습니다. 쿼리 매개 변수가 비어 있는지 염려되는 경우

def findSome() { 
    respond Some.createCriteria().list { 
     like 'name', "%$query%" 

     maxResults 5 
     order 'name', 'asc' 
    } 
} 

당신은 당신의 사건에 의존 command objects 또는 url mappings constraints에 그 책임을 위임 할 수 있습니다.

Responding with JSON 섹션에서 한 번만 내게 일어난 JSON

+0

나는 그 오류가 질의에 없다고 생각한다. findAll() 시도한 및 동일한 오류를 반환합니다 : | – dadang1234

+0

어떤 grails 버전을 사용하십니까? – user615274

+0

Grails 버전 : 3.2.8 – dadang1234

0

에 응답 할 수있는 다른 방법을 찾을 수 있습니다 나는 응답 강제로 그것을 해결 : 그것은 매우 분명

render(text: someList as JSON, contentType: 'application/json', encoding: 'UTF-8') 

, 그러나 확인 방법은 컨트롤러 내부이며이 구성이 있습니다

static responseFormats = ['json', 'html']