2013-06-18 3 views
0

나는 groovy로 findAll의 예제를 찾기 위해 고심하고있다. 노드의 속성을 가져 와서 값을 출력하는 간단한 코드 스 니펫 이 있습니다. 단, 일련의 속성을 반복 할 때만 마지막 값을 얻습니다. 내가 여기서 잘못하고있는 것이 있습니까,이 은 정말로 단순 해 보입니다. 내 JSP에서groovy - findAll이 하나의 값만 얻음

JcrUtils.getChildNodes("footer").findAll{ 
selectFooterLabel = it.hasProperty("footerLabel") ? it.getProperty("footerLabel").getString() : "" 
} 

난 그냥 속성을 인쇄하고 있습니다 : 도움을

<%=selectFooterLabel%> 

감사합니다!

+2

내가 selectFooterLabel'은'생각 당신에게 그루비-진정한 자신을있는 목록에서 값의 하위 집합을 제공없이 폐쇄 매개 변수와 함께 findAll()을 사용할 수 있습니다 비어 있지 매번 재 할당됩니다. – NINCOMPOOP

답변

2

findAll은 클로저가 Groovy-true 값 (부울 true, 비어 있지 않은 문자열/map/collection, null이 아닌 다른 것)을 반환하는 원래 목록의 모든 항목을 포함하는 것을 반환합니다. 그것은 당신이 아마 당신에게 폐쇄에 의해 반환 된 값의 목록을 줄 것이다

def footerLabels = JcrUtils.getChildNodes("footer").collect{ 
it.hasProperty("footerLabel") ? it.getProperty("footerLabel").getString() : "" 
} 

collect을 원하는 것 같습니다. 그런 다음 이들의 하위 집합을 원하는 경우에 그

def footerLabels = JcrUtils.getChildNodes("footer").collect{ 
it.hasProperty("footerLabel") ? it.getProperty("footerLabel").getString() : "" 
}.findAll() 
+0

감사! collect 내에서 selectFooterLabel을 삭제 한 특별한 이유가 있었습니까? –

+0

@DelmonYoung 왜냐하면 코드가 실제로하는 일을 가려 내기 때문입니다. 'collect' 메소드는 원래 목록의 각 요소에 대해 호출 될 때 클로저에 의해 리턴 된 값을 "수집"합니다. 과제를 클로저 내부에 두는 것은 옳지 않습니다. 중요한 것은 클로저가 돌아 오는 것입니다. –

관련 문제