asdtiang的博客 感謝blogjava提供的博客交流平臺

          grails 中render xml json 使用記錄

          Posted on 2011-01-10 12:24 asdtiang 閱讀(2481) 評論(0)  編輯  收藏 所屬分類: grails study
          只有使用了,才知道方便和強大啊,這主要還是依賴于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的文檔才發現寫法不一樣呢









          天蒼蒼,野茫茫,風吹草底見牛羊

          posts - 80, comments - 24, trackbacks - 0, articles - 32

          Copyright © asdtiang

          asdtiang的博客 PaidMailz
          點擊廣告網賺A(每天4個廣告,每個0.0025美元,一個搜索廣告0.03美元)
          主站蜘蛛池模板: 嘉峪关市| 瑞昌市| 河源市| 明星| 丰原市| 遂宁市| 安宁市| 原阳县| 仙桃市| 焉耆| 盐池县| 读书| 松原市| 奉节县| 天水市| 乳源| 辽阳市| 扎鲁特旗| 勃利县| 五峰| 乐东| 全州县| 龙岩市| 拉萨市| 鸡泽县| 湟中县| 尤溪县| 河东区| 永顺县| 太仆寺旗| 瓦房店市| 潜江市| 凤庆县| 东海县| 堆龙德庆县| 商河县| 广宁县| 文昌市| 贵州省| 府谷县| 大英县|