Play 2.0:将URL参数推送到视图

时间:2012-03-23 13:46:14

标签: java playframework-2.0

我只是在学习Play 2.0框架。所以我有一个非常基本的问题:我只想获取一个URL参数并在视图中显示它。你是怎么做到的?

我创建了网址格式:

GET /test/:id controllers.Application.testOutput(id: Long)

Application中的一个适当的方法:

public static Result testOutput(long id) {
        return ok(
                views.html.test.render(id)
        );
}

如何从视图中调用id变量?我知道如何在视图中调用模型中定义的方法,但我不知道如何在视图中显示id变量。它是将id变量传递给render方法的正确方法吗?

我想了解基本概念,因此对答案的详细解释会很棒!

3 个答案:

答案 0 :(得分:2)

我们的测试网址为http://localhost:9000/greeter?message=hello,这将输出text/plain响应,其中包含参数message的内容(即问候)。首先,让我们定义路线

GET     /greeter           controllers.Greeter.say(message: String)

然后,创建一个Greeter控制器(我使用Java)

package controllers;

import play.*;
import play.mvc.*;

// This lets you call the template without the views.html prefix
// import views.html.*;
import views.txt.*;

public class Greeter extends Controller {

  public static Result say(String message) {
    return ok(greeter.render(message));
  }

}

您可以看到ok()调用文件app/views/greeter.scala.txt中定义的scala函数。这是该文件的内容(第一行定义函数内使用的String类型的消息参数

@(message: String)
I'm the content. Note that you can place
anything you want here. Scala expressions
begin with the '@@' character. For example
next line contains the content of message:
@message

在这种情况下,我使用.txt作为文件扩展名,因为我想要纯文本响应。如果要生成HTML输出,只需制作.scala.html文件

即可

答案 1 :(得分:0)

客户端请求由the Play router处理,后者又将其转发给操作(这是控制器内部的方法)

GET    /greeter             Greeter.say   

来自Play doc

  

路由定义的最后一部分是Java调用。这部分是   由操作方法的完全限定名称定义。那个行动   方法必须是Controller类的公共静态void方法。一个   必须在控制器包中定义控制器类   是play.mvc.Controller的子类。

     

如果是,则可以在Controller类名称之前添加Java包   没有直接在控制器包下定义。控制器   包本身是隐式的,所以你不需要指定它

Inside the action,您可以通过param对象或直接通过方法签名获取参数:

public static void say(String what) {
    ... 
}

您可以像在示例中一样通过render(what)将对象传递给模板。

最后your template可以使用${what}语法访问这些对象。

编辑 这是Play 1.x的做事方式。我没注意到你的标签,但仍然希望这有帮助。 Play2使用新的Scala模板引擎here is the guide。您似乎必须在模板的开头声明参数,然后您可以通过@what语法访问它们。那是因为模板现在是一个已编译的Scala函数,因此它可以在编译时进行类型检查以及类似的事情。使用render(what)将参数传递给此函数(与您一样)。我本人并不自己使用Play2.0:从技术角度来看,这是一个很大的进步,但代价是不那么直观,而且更加冗长。我认为较简单的项目不会从这些改进中受益

答案 2 :(得分:0)

在Play 2中,模板只是简单的函数,因此您可以像调用任何函数一样调用它们。