重定向到传递参数的页面(不更改URL)

时间:2013-11-06 10:05:51

标签: java scala playframework playframework-2.1

在控制器中我就是这个

public static Result index(String message, String alert) {
    return ok(index.render(message, alert));
}

路线档案

GET     /        controllers.Application.index(msg: String, alert: String)

然后,在其他方法中,我将返回:

return redirect(routes.Application.index("String message 1", "String message 2"));

return ok(index.render("String message 1", "String message 2"));

我想要做的是重定向到索引页面,传递两个字符串以显示在index.scala.html中:

@(message: String, alert: String)

@main("Ready") {
    @if(message) { 
        <div class="alert">
          @Html(message)
          @Html(alert)
        </div>
    }
}

返回都不起作用。我从Eclipse中得到了这个错误:

The method index() in the type ReverseApplication is not applicable for the arguments (String, String)

这来自游戏编译:

render(java.lang.String,java.lang.String) in views.html.index cannot be applied to (java.lang.String)

修改

使用render可以,但是:它呈现索引页面,但网址仍然是旧的。这是对的吗?

使用redirect:它会重定向页面,但会将传递的字符串附加到网址

http://localhost/?message=Stringmessage1&alert=Stringmessage2

我想要的是重定向到传递字符串的页面,但是使用重定向的url。有可能吗?

2 个答案:

答案 0 :(得分:1)

你搞砸了一些东西:

// This is a redirect to an action (public static Result index()) which in your case hasn't these 2 String args declared in route/method definition
return redirect(routes.Application.index("String message 1", "String message 2"));

// This one renders the view `index.scala.html`
return ok(index.render("String message 1", "String message 2"));

提示:只需将索引视图文件重命名为ie即可。 indexView.scala.html然后使用:

return ok(indexView.render("String message 1", "String message 2"));

避免错误。

并且确认:你可以在重定向中使用参数,无论如何,请记住它们需要在路径文件中声明,并且在java操作中 NOT 是可选的。

答案 1 :(得分:0)

这是我尝试做我需要的最好的方式:

控制器

public static Result save() {
  flash("success", "The item has been created");
  return redirect(routes.Application.index());
}

index.scala.html

  @if(flash.contains("success")) {
    <div class="alert">
      @flash().get("success")
    </div>
  }

使用flash我可以将字符串“传递”到重定向页面,而无需更改网址。