玩!框架表单重定向不起作用

时间:2012-04-23 19:47:18

标签: java playframework routes

我在玩游戏时遇到了重定向问题!形成。我认为问题在于我如何处理路线。想法是用户应该能够通过使用登录来使用secruity密钥首先通过index.hmtl,或者直接在包含access_token的有效路径中输入(使用qr-code重定向)来访问dashboard.html

我想做的是如下:

1)使用index.html(route:Application.index)

上的表单登录

这是我的表单(位于index.html中):

<form action="@{Dashboard.authenticate()}" method="POST" name="login">
    <input name="key" type="password" maxlength="128" value="${flash.key}">
    <input class="button" id="btnLogin" type="submit" value="Login">
</form>

2)验证并重定向到dashboard.html(route:Dashboard.dashboard)

public static void dashboard(String access_token) {
   /*
      ...some code
   */

    render(username);
}


public static void authenticate(String key) {
   /*
      ...some code
   */
     dashboard(access_token);
}

这是我的路线档案:

# Home page 
GET     /                   Application.index
POST    /dashboard      Dashboard.authenticate
GET     /dashboard      Dashboard.dashboard

如果我通过以下网址直接调用仪表板(String access_token),仪表板路径可以正常工作:http://localhost:9000/dashboard?access_token=0000 但是如果我尝试使用调用authenticate(String key)的登录表单进行登录,我会得到这个URL http://localhost:9000/dashboard?access_token&key=1234,其中key是发送给auth()函数的var。显然我的错是路线,但我已经尝试并测试了逻辑,我100%肯定它是合理的。 我正在使用Play 1.2.4 我花了两天时间来处理这个问题,并且对任何建议都非常感激。

3 个答案:

答案 0 :(得分:1)

这实际上似乎是一个错误。也许试试

redirect("/dashboard?access_token="+access_token);

而不是

dashboard(access_token);

答案 1 :(得分:1)

Java代码似乎很好。为了以防万一,您是否尝试将路径文件更改为:

# Home page 
GET     /                   Application.index
GET     /dashboard      Dashboard.dashboard
POST    /dashboard      Dashboard.authenticate

在POST之前移动GET(顺序很重要,如果该部分有Play错误,应该修复它。)

另一种选择是简单地重命名POST路由,以解决问题,如果它是由具有相同“路径”的两条路由引起的。

# Home page 
GET     /                    Application.index
GET     /dashboard           Dashboard.dashboard
POST    /dashboard/auth      Dashboard.authenticate

答案 2 :(得分:0)

解决了问题!

我忘了提到... oops是我也在使用jQuery Mobile,问题与Play有关!路由被覆盖我的jQuery Mobile页面路由。

我通过添加以下脚本禁用了路由:

$(document).bind("mobileinit", function(){
    $.mobile.ajaxEnabled = false;
    $.mobile.linkBindingEnabled = false;
    $.mobile.hashListeningEnabled = false;
    $.mobile.pushStateEnabled = false;
    $.mobile.changePage.defaults.changeHash = false;

})

使用jQuery网站上的说明:http://jquerymobile.com/test/docs/api/globalconfig.html我实现了上述内容,但脚本需要按以下顺序在.hmtml标头中引用:

<script src="jquery.js"></script>
<script src="custom-scripting.js"></script>
<script src="jquery-mobile.js"></script>