2011-05-19 60 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> 

希望这将有助于..