posts - 431,  comments - 344,  trackbacks - 0

          使用render方法輸出XML

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

          render方法可以傳遞一個代碼塊來執(zhí)行標記生成器產(chǎn)生XML

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

          這段代碼的結(jié)果將會像這樣:

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

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

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

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

          使用render方法輸出JSON

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

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

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

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

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

          自動XML列集(Marshalling)

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

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

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

          import grails.converters.*

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

          render Book.list() as XML

          輸出結(jié)果看上去會像下列這樣:

          <?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>

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

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

           

          自動JSON列集(Marshalling)

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

          render Book.list() as JSON

          輸出結(jié)果看上去會像下列這樣:

          [
          {"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 周銳 閱讀(559) 評論(0)  編輯  收藏 所屬分類: Groovy&GrailsJavaJavaScript 、XML
          主站蜘蛛池模板: 通河县| 迭部县| 邵武市| 浠水县| 海兴县| 通山县| 福清市| 鄱阳县| 莒南县| 南投县| 北流市| 岐山县| 阿巴嘎旗| 神农架林区| 子洲县| 会东县| 丹寨县| 通山县| 鄄城县| 衡南县| 灌阳县| 得荣县| 都匀市| 秭归县| 黄骅市| 策勒县| 乌兰浩特市| 博罗县| 宁波市| 安顺市| 沛县| 岳普湖县| 聂拉木县| 贺州市| 黔南| 铜梁县| 武邑县| 包头市| 威远县| 馆陶县| 都匀市|