Web框架中的控制器?[红宝石、圣杯等]它们是如何工作的



所以我想做的是,如果输入用户名"admin"并输入密码"pass",则登录页面定向到管理页面(例如:"admin.gsp")。 或者,如果输入了用户名"user"和密码"pass",则将其定向到用户页面

但是我不明白控制器究竟是如何工作的。

因此,当您将页面重定向到特定的控制器和特定方法时,如何使其重定向到特定页面。你在该方法中实现了什么代码?

为了更好地解释我的问题。下面我们有控制器用户的代码,带有 if else 语句,具体取决于用户在登录框中键入的内容。

package file_download
class UserController {
    def index() { 
        //code that directs the page to username page, let's call it or user.gsp
    }
    def login = { 
        if(params.username == "admin" && params.password == "pass")
        {
            session.user = "admin"
            redirect(controller:"admin",action:"admin")
        }
        else if(params.username == "user" && params.password == "pass")
        {
            session.user="user"
            redirect(controller:"user",action:"index")
        }
        else 
        {
            flash.message = "login failed"
        }
        redirect(controller:"user",action:"login")
    }
    def logout = {
        session.user = null
        redirect(action: 'index')
    }

}

现在在这里,我们有带有操作索引的管理控制器,它应该实现一个代码来将页面定向到...admin.gsp,或admin.html,无论管理页面被称为

package file_download
class AdminController {
    def index() { 
        //code that takes us to admin page let's call it admin.gsp 
    }
}

我们究竟该怎么做?我需要对控制器进行一些解释。

谢谢。请询问您是否需要对此问题进行更多澄清,因为我将对其进行编辑。

我认为你有错误的假设。在Grails(我不知道rails)中,当你进入登录页面时,假设

/app/user/login

然后,首先调用控制器方法(def login()),所以你的逻辑不应该去那里,它实际上应该什么都不做,按照惯例,它最终会渲染login.gsp。接下来,您的用户填写他的用户名/通行证并提交表单,第二个请求让我们说

/app/user/auhtenticate

这是您的逻辑应该去的地方,重定向将按您的预期工作

所以基本上 - 首先调用控制器方法,并且(除非您指定要渲染的 gsp 或执行重定向)在执行该方法后,将呈现 gsp 视图

我对rails一无所知,但是在grails中,您要查找的是render

渲染:(http://grails.github.io/grails-doc/latest/ref/Controllers/render.html )

所以代码看起来像这样

 def index() { 
    render view: "/directory/inside/views/admin" model: [thing1: "Thing One"] 
}

最新更新