【问题标题】:Grails render XML invokes another action from the same controllerGrails 渲染 XML 从同一个控制器调用另一个操作
【发布时间】:2015-11-29 12:00:26
【问题描述】:

我正在使用 Grails 2.4.4 并且有一个以这种方式呈现的操作:

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 操作名称

【问题讨论】:

  • 一开始我几乎不相信你,但我创建了一个测试项目并且得到了相同的行为。我会继续挖掘......

标签: xml grails


【解决方案1】:

我很惊讶patient 周围的引用不起作用。

答案是你需要引用it 而不是delegate 或命名在闭包中传递的参数并使用它。

本例中的it 指的是BaseMarkupBuilder 类中的一个内部类(文档)。

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

【讨论】:

  • 不知道您是如何找到解决方案的,但这很棒!
猜你喜欢
  • 2015-07-31
  • 1970-01-01
  • 2015-10-25
  • 1970-01-01
  • 2011-08-28
  • 2012-01-31
  • 2014-05-28
  • 2011-06-02
  • 1970-01-01
相关资源
最近更新 更多