2015-11-27 42 views
2

我工作的Grails 2.4.4其他操作,並有呈現這樣一個動作:Grails的渲染XML調用來自同一控制器

def subjects = [...] 
render(contentType:"text/xml", encoding:"UTF-8") { 
    'result' { 
    'patients' { 
     subjects.each { person -> 
      delegate.patient { 
       uid(person.uid) 
       firstName(person.firstName) 
       lastName(person.lastName) 
       ... 
      } 
     } 
    } 
... 

在相同的控制器我有一個「getPatient」行動,並且在處理XML呈現時調用該動作,從這一行開始:delegate.patient

我試着用「委託」(它似乎代表存在控制器本身),我也試着引用節點像'患者'{...},但每次都會調用getPatient。

有沒有辦法讓這個XML呈現工作而不更改getPatient操作名稱

+0

我幾乎不相信你,但我創建了一個測試項目,並獲得相同的行爲。我要繼續挖掘... – tylerwal

回答

1

我很驚訝patient的報價行不通。

答案是,而不是delegate你需要參考it或者命名在閉包中傳遞的參數並使用它。

本例中的it是指BaseMarkupBuilder類中的內部類(Document)。

render(contentType:"text/xml", encoding:"UTF-8") { 
    'result' { 
     'patients' { 
      subjects.each { person -> 
       it.'patient' { 
        uid(person.uid) 
        firstName(person.firstName) 
        lastName(person.lastName) 
       } 
      } 
     } 
    } 
} 
+0

不知道你如何設法達成解決方案,但這太棒了! –