簡體   English   中英

Web框架中的控制器? [紅寶石,Grails等。]它們如何工作?

[英]controllers in web frameworks ? [ruby, Grails, etc..] How do they work?

因此,如果要輸入用戶名“ admin”並且輸入密碼“ pass”,我想做的就是將登錄頁面定向到管理頁面(例如:“ admin.gsp”)。 或將其定向到用戶頁面(如果輸入了用戶名“ user”和密碼“ pass”)

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

因此,當您將頁面重定向到特定的控制器和特定的方法時,如何使它重定向到特定的頁面。 您在該方法內實現了什么代碼?

更好地解釋我的問題。 下面是控制器User的代碼,其中包含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,稱為admin的頁面

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"] 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM