2016-09-18 127 views
1

我'相當新的Playframework,並有一些麻煩重定向到另一個模板從點擊A HREFPLayframework重定向不工作

路線

GET /       controllers.Index.show 
GET  /signin      controllers.SignIn.show 
GET  /signup      controllers.SignUp.show 

指數(圖)

<li> 
    <a href="@controllers.Index.signOut()"> 
    Uitloggen 
    </a> 
</li> 

指數(控制器)

public static Result signOut() { 
    return redirect(routes.SignIn.show()); 
} 

登入(控制器)

public static Result show() { 
    return ok(signin.render("Inloggen")); 
} 

enter image description here

還試圖這樣:

public static Result signOut() { 
    return SignIn.show();  // <-- call to SignIn (controller) 
} 

enter image description here

但每當我用戶的路徑:/登入直接在瀏覽器中它工作得很好..

缺少什麼我在這裏?

+0

你爲什麼不把'/ signin'作爲href? –

回答

1

路由條目具有以下結構:

[HTTP method] [url] [controller method] 

在路由文件條目的第二列是URL被從瀏覽器使用。當您將網址提供給瀏覽器時,Play會在路徑文件中查找值url,並調用控制器方法。

索引實現這樣的:

public static Result signOut() { 
    return redirect(routes.SignIn.show()); 
} 

因此,在控制器方法是Index.signOut。 讓我們的網址分配給它,並添加進入的路徑文件:

GET  /signout  controllers.Index.signOut 

只要你提供的網址/signout給瀏覽器,重定向會發生。

順便說一下,您的示例中缺少爲路由/註冊指定的SignUp控制器。

如果您沒有特殊原因,我還建議您從控制器方法中刪除靜態。

+0

嘿謝謝你的回覆。我並不清楚每個行動實際上都需要他自己的路線,即使它只是重定向到另一條路線。 SignUp控制器缺失的原因是因爲該示例沒有使用它,所以我認爲我可以將其忽略。 感謝您幫助我在這裏! –

+0

順便說一句,通過刪除靜態,我會得到編譯錯誤:signOut不是對象控制器的成員。 –

1

嘗試:

<li> 
    <a href="@routes.SignIn.show()"> 
    Uitloggen 
    </a> 
</li> 
+0

這是行不通的,但由於註銷需要一些更多的邏輯,而不是隻重定向它需要它自己的方法。 –