只有使用了,才知道方便和強大啊,這主要還是依賴于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的文檔才發現寫法不一樣呢
天蒼蒼,野茫茫,風吹草底見牛羊