2011-05-19 93 views
2

我對grails非常陌生,也許這是我問的最簡單的問題。 我正在創建一個非常簡單的自我學習應用程序,我創建了一個登錄頁面。登錄成功後,應讀取xml文件並顯示輸出結果。任何人都可以請示例說明這一點。也請告訴我應該是對XML文件的文件夾位置,下面是我的代碼:? UserController.groovy如何在grails中讀取xml文件?

class UserController { 

    def index = { } 

    def login = { 
     def user = User.findWhere(username:params['username'], 
            password:params['password']) 
            session.user = user 
     if (user) {  
      redirect(action:display) 
     } 
     else { 
      redirect(url:"http://localhost:8080/simple-login/") 
     } 
    } 
    def display = { 
     def stream = getClass().classLoader.getResourceAsStream("grails-app/conf/sample.xml") 
     return [data: XML.parse(stream)] 
    } 

} 

myxml.gsp

<html> 
<body> 
    <p>Please find the details below:</p> 
    <p>${data}</p> 
</body> 
</html> 

URLMappings.groovy

class UrlMappings { 

    static mappings = { 
     "/user/login" (controller: "user" ,action: "login") 
     "/user/display"(controller:"user" ,action:"display") 

     "/"(view:"/index") 
     "500"(view:'/error') 
    } 

} 

現在我已經有index.gsp作爲用戶登錄時顯示的第一頁,是否可以在URLMappings中指定多個視圖?也正如其中一個答覆中所建議的那樣,如果我必須定義一個名爲「myxml」的動作並直接指向諸如「/ controller」/ myxml之類的URL,那麼這將是什麼?請幫忙!

回答

0

這是一個快速示例。

控制器

def index = { 
    def stream = getClass().classLoader.getResourceAsStream("grails-app/conf/my-file.xml") 
    return [data: XML.parse(stream)] 
} 

查看(index.gsp中)

<html> 
... 
<body> 
    <p>${data}</p> 
</body> 
</html> 
+0

只是創建一個動作myxml和視圖myxml.gsp,然後去到URL/「控制器」/myxml – netbrain 2011-05-19 12:59:52

+0

夫婦在這裏的東西... – AndrewW 2014-01-31 05:33:41

+0

1. XML.parse()只需要一個字符串或一個HttpServletRequest,你想例如。 XML.parse(流,「UTF-8」)或您正在使用的任何編碼。 2.如果my-file.xml位於「grails-app/conf」目錄中,則只需要.getResourceAsStream(「my-file.xml」) – AndrewW 2014-01-31 05:39:17

1

在這裏,我把我的XML文件webapp/xmls/目錄下,並解析abc.xml文件

def parse () { 
    // Getting context path here 
    def webRootDir = sch.servletContext.getRealPath ("/") 

    // Create a new file instance 
    def f = new File (webRootDir + "/xmls/" + "abc.xml") 

    // Parxing XML file here 
    def items = new XmlParser ().parseText(f.text) 

    // iterating through XML blocks here 
    items.question.each { 
     // Creating domain class object to save in DB 
    def question = new Question () 
    def node = it 
    question.with { 
    qtext = node.qtext.text() 
    answer = node.answer.text() 
    if (!hasErrors() && save(flush: true)) { 
     log.info "mcq saved successfully" 
    } else 
    errors.allErrors.each { 
      err-> 
       log.error err.getField() + ": " 
       log.error err.getRejectedValue() + ": " + err.code 
    } 
    } 
} 
} 

這是示例XML(abc.xml)文件:

<qns> 
    <question id="q1"> 
    <qtext> First letter of alphabet is?</qtext> 
    <answer>A<answer> 
    </question> 

    <question id="q2"> 
    <qtext> Second letter of alphabet is?</qtext> 
    <answer>A<answer> 
    </question> 
    . 
    . 
    . 
    . 
</qns> 

希望這將有助於..