2011-09-13 2 views
2

私は、各コールインスタンスに固有のXMLファイルに基づいて電話を開始するアプリケーションを設定しています。テスト目的のために、私はGroovyのMarkupBuilderメソッドとStringWriterメソッドを使用してXMLを単一のファイルに書き込み、次に呼び出しが開始されたときにそのファイルを上書きしていました。GrailsでXMLを動的にレンダリングするには?

しかし、現在使用されているXMLを上書きするため、これは運用環境では機能しません。各呼び出しのために特別にXMLをレンダリングする方法のルールを含む「のcreateXML」方法と

callInstance.createXml() 

:だから、私は動的ようなもので、それを呼び出すことによって、コントローラにXMLを作成したいと思います。

私は、オブジェクトを動的に作成されたXMLファイルに変換する方法を尋ねる複数のインスタンスを見つけましたが、MarkupBuilderを使用する必要があるため、これは少し異なります。クイックリファレンスについては

は、ここで私が働いているかの小さな例です:事前に

def f1 = new File('filename') 
f1.delete() 
def writer = new StringWriter() 
     def xml = new MarkupBuilder(writer) 
      xml.doubleQuotes = true 
      xml.vxml(version:'2.1'){ 
       property(name:"termchar", value:"#") 
       var(name:"hi", expr:"'Hello!'") 
       xml.form(){ 
        block(){ 
         value(expr:"hi") 
         xml.goto(next:"#next") //etc, etc 
        } 
       } 
      } 
     //break 
     f1.createNewFile() 
      f1 << writer.toString() 

ありがとう!

def callxml = { 
    def call = Call.get(params.id) 
    render(contentType:"text/xml") { 
    vxml(version:'2.1') { 
     var(name:'hi', expr:call.message) 
    } 
    } 
} 

それとも、あなたはコールクラスにメソッドを追加することができますので、としてXMLに自分自身を変換する方法を知っている:あなたは(あなたのコントローラで)行うことができます

+0

を呼び出すことができる必要がありますが、[この記事](http://www.ibm.com/developerworks/library/j-grails09168/)を見たことがありますか? 3歳ですが、まだそれには良い情報があります。 –

答えて

1

ことの一つは、そのようsend the XML back from the render methodにあります文字列:

class Call { 
    String message 

    String toXml() { 
    def writer = new StringWriter() 
    new groovy.xml.MarkupBuilder(writer).with { xml -> 
     xml.doubleQuotes = true 
     vxml(version:'2.1'){ 
     var(name:"hi", expr:"${this.message}") 
     } 
    } 
    writer.toString() 
    } 
} 

次にあなたがcall.toXml()

+0

クイック返信ありがとう。私はログに出力を印刷しようとしていない、私は関数にパラメータを渡すことができるようにテキストをレンダリングしようとしているので、これは動作するとは思わない。私は、コールインスタンスのパラメータを生成されたXMLに入力するためにコールインスタンスで呼び出すことができる関数を探しています。 –

+0

@Benjaminが私の応答を変更しました。うまくいけば、私はあなたが今何を意味するのかに近づいています:-) –

+0

これに取り組もうとしたら最初の方法は、それは私がホストされたアクションで外部アプリケーションを指すことができますか?例:http:// localhost:8080/project/controller/callxml?今、私はホストされたxmlファイルに基づいて配置される呼び出しを指示しています。これは同じように振る舞いますか?すみません、私はこれが初めてです! –

関連する問題