Web 框架中的控制器? [ruby、Grails 等。] 它们是如何工作的?
controllers in web frameworks ? [ruby, Grails, etc..] How do they work?
所以我想做的是将登录页面定向到管理页面(例如:"admin.gsp"),如果输入用户名 "admin" 并输入密码 "pass"。或者如果输入了用户名 "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
.接下来,您的用户填写他的 username/pass 并提交表单,第二个请求是
/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"]
}
所以我想做的是将登录页面定向到管理页面(例如:"admin.gsp"),如果输入用户名 "admin" 并输入密码 "pass"。或者如果输入了用户名 "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
.接下来,您的用户填写他的 username/pass 并提交表单,第二个请求是
/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"]
}