posts - 431,  comments - 344,  trackbacks - 0

          使用render方法輸出XML

          Grails支持一些不同的方法來產生XML和JSON響應。第一個是隱式的通過render方法。

          render方法可以傳遞一個代碼塊來執行標記生成器產生XML

          def list = {
          def results = Book.list()
          render(contentType:"text/xml") {
          books {
          for(b in results) {
          book(title:b.title)
          }
          }
          }
          }

          這段代碼的結果將會像這樣:

          <books>
          <book title="The Stand" />
          <book title="The Shining" />
          </books>

          注意,當你使用標記生成器時,必須小心避免命名沖突。例如,這段代碼將產生一個錯誤:

          def list = {
          def books = Book.list()  // naming conflict here
          render(contentType:"text/xml") {
          books {
          for(b in results) {
          book(title:b.title)
          }
          }
          }
          }

          原因是,這里的一個本地變量books企圖作為方法被調用。

          使用render方法輸出JSON

          render 方法可以同樣被用于輸出JSON:

          def list = {
          def results = Book.list()
          render(contentType:"text/json") {
          books {
          for(b in results) {
          book(title:b.title)
          }
          }
          }
          }

          在這種情況下,結果就會是大致相同的:

          [
          {title:"The Stand"},
          {title:"The Shining"}
          ]

          同樣的命名沖突危險適用于JSON生成器。

          自動XML列集(Marshalling)

          (譯者注:在此附上對于列集(Marshalling)解釋:對函數參數進行打包處理得過程,因為指針等數據,必須通過一定得轉換,才能被另一組件所理解。可以說列集(Marshalling)是一種數據格式的轉換方法。)

          Grails同樣支持自動列集(Marshalling)領域類為XML通過特定的轉換器。

          首先,導入grails.converters 類包到你的控制器(Controllers)中:

          import grails.converters.*

          現在,你可以使用下列高度易讀的語法來自動轉換領域類成XML:

          render Book.list() as XML

          輸出結果看上去會像下列這樣:

          <?xml version="1.0" encoding="ISO-8859-1"?>
          <list>
          <book id="1">
          <author>Stephen King</author>
          <title>The Stand</title>
          </book>
          <book id="2">
          <author>Stephen King</author>
          <title>The Shining</title>
          </book>
          </list>

          一個使用轉換器的替代方法是使用Grails的codecs特性。codecs特性提供了encodeAsXML和encodeAsJSON方法:

          def xml = Book.list().encodeAsXML()
          render xml

           

          自動JSON列集(Marshalling)

          Grails同樣支持自動列集(Marshalling)為JSON通過同樣的機制。簡單替代XMLJSON

          render Book.list() as JSON

          輸出結果看上去會像下列這樣:

          [
          {"id":1,
          "class":"Book",
          "author":"Stephen King",
          "title":"The Stand"},
          {"id":2,
          "class":"Book",
          "author":"Stephen King",
          "releaseDate":new Date(1194127343161),
          "title":"The Shining"}
          ]

          再次作為一種替代,你可以使用encodeAsJSON達到相同的效果

          posted on 2008-06-05 16:21 周銳 閱讀(561) 評論(0)  編輯  收藏 所屬分類: Groovy&GrailsJavaJavaScriptXML
          主站蜘蛛池模板: 柳州市| 河西区| 新乡市| 东源县| 正阳县| 财经| 安陆市| 芒康县| 巴里| 阿鲁科尔沁旗| 西华县| 贵德县| 古蔺县| 海丰县| 鹤峰县| 黄山市| 高青县| 佳木斯市| 容城县| 彩票| 远安县| 济宁市| 顺昌县| 德昌县| 阿城市| 贡觉县| 阿尔山市| 永兴县| 通化市| 临湘市| 阿克苏市| 醴陵市| 泸定县| 黔西| 齐齐哈尔市| 城市| 岢岚县| 嘉兴市| 南平市| 南宁市| 新兴县|