2013-06-18 26 views
0

我正在努力尋找groovy的findAll的例子。我有一個非常簡單的代碼片段,獲取節點的屬性並輸出它的值 。除了當我通過 循環一系列屬性時,我只獲得最後一個值。有沒有什麼我在這裏做錯了,這個 看起來很簡單。groovy - findAll只能獲得一個值

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

在我的jsp我只是打印屬性:

<%=selectFooterLabel%> 

感謝您的幫助!

+2

我相信'selectFooterLabel'是每次重新分配。 – NINCOMPOOP

回答

2

findAll返回List包含原始列表中的所有項目,閉包返回一個Groovy-true值(布爾值true,非空字符串/ map/collection,其他非null)。它看起來像你可能想collect

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

這將給你一個閉包返回值的列表。如果你再想只有那些子集不爲空,你可以使用findAll()沒有關閉參數,讓您從列表中本身Groovy的真值的子集

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

謝謝!有沒有一個特定的原因,您刪除收集內的selectFooterLabel? –

+0

@DelmonYoung因爲它掩蓋了代碼實際上在做什麼。 'collect'方法在收集原始列表中每個元素時由閉包返回的值。在閉包中放置一個任務是不對的,重要的是關閉_returns_。 –