grails 中render xml json 使用记录

只有使用了,才知道方便和强大啊,这主要还是依赖于groovy的MarkupBuilder,详见: http://groovy.codehaus.org/Creating+XML+using+Groovy%27s+MarkupBuilder
只有理解了它,在grials里使用render xml才能如鱼得水啊。其实很简单

def xml = new MarkupBuilder(writer)
xml.records() {
  car(name:'HSV Maloo', make:'Holden', year:2006) {
    country('Australia')
    record(type:'speed', 'Production Pickup Truck with speed of 271kph')
  }
  }
对应的xml文档:
 <records>
      <car name='HSV Maloo' make='Holden' year='2006'>
        <country>Australia</country>
        <record type='speed'>Production Pickup Truck with speed of 271kph</record>
      </car>
</records>
只要分清对应关系就可以了。属性和属性值,节点,节点的值怎么画到groovy里。
下面是controller里的返回xml代码:
def tests=TestAjaxPage.findAll()
  render(contentType:"text/xml") {
   tests1 {
    for(b in tests) {
     test(title:b.title,dateCreated:b.dateCreated){
      h b.content
      }
    }
   }
  }

对应的返回文档为:

<tests1>
<test title="社区技术需求test" dateCreated="2011-01-07 15:53:32.922">
<h>haha</h>
</test>
</tests1>

这其实对于b/s,再混用c/s的程序中交换数据还是很有用的,so easy


render json就要麻烦点了,主要是1.1版本和1.3.6版本写法不一样:
先写1.1的吧:
render(contentType:"text/json") {   
     max "max"
     resultList{
      Book.getAll().each{oneitem->
            Book(
         id:oneitem.id,
         name:oneitem.name,  
         )
      }
     }
    }
1.3.6的写法如下:
def tests=TestAjaxPage.findAll()
  render(contentType:"text/json") {
   max  (max1:"max")
   tests1= array{
    tests.each {one->
        TestAjaxPage(
       id:one.id,
       content:one.content,
       title:one.title,
       dateCreated:one.dateCreated
       )
    }
   }
  }
返回数据:{"max":{"max1":"max"},"tests1":[{"id":1,"content":"qewrqwe","title":"qwereqwr","dateCreated":"2011-01-07T10:11:52Z"}]}
最后var e=originalRequest.responseText.evalJSON();就是在js里调用下.evalJSON(),就可以看做对象访问数据。

版本不同,我手里一致用1.1的中文文档,做的时候自己用的1.3.6,郁闷了好久,出不来。最后看1.3.6的文档才发现写法不一样呢









天苍苍,野茫茫,风吹草底见牛羊

你可能感兴趣的:(grails 中render xml json 使用记录)