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 周銳 閱讀(573) 評論(0)  編輯  收藏 所屬分類: Groovy&GrailsJavaJavaScriptXML
          主站蜘蛛池模板: 白朗县| 扬州市| 泰宁县| 韩城市| 阆中市| 台中县| 赤壁市| 云阳县| 蒲城县| 慈溪市| 溧阳市| 舟山市| 黄冈市| 祁东县| 广丰县| 广水市| 日喀则市| 色达县| 贵溪市| 瓮安县| 太康县| 万荣县| 陇川县| 沅江市| 额尔古纳市| 高安市| 积石山| 夏邑县| 河西区| 柘荣县| 安岳县| 蓬莱市| 平昌县| 裕民县| 枞阳县| 高州市| 增城市| 四川省| 潼南县| 崇左市| 道孚县|