2013-03-07 66 views
4

playframework 2中的java控制器可能将可选参数传递给scala页面吗?如何将可选参数传递给play framework 2中的scala模板

我有一个scala页面,我从不同的动作呈现。只有在某些情况下,这些操作中的一个应该将参数传递给scala,我是否必须更改每个呈现调用?基本上,我想打电话给template.scala.html 在两个方面

template.render(msg) //java 

template.render()//java 

凡在我的模板,我有这样的: @(MSG:字符串= “XYZ”)

当前我得到一个没有消息的调用错误,它不是 views.html.template中的render(java.lang.String)不能应用于()

+1

是Java或斯卡拉控制器? – TizianoPiccardi 2013-03-07 21:02:53

+0

正如@TizianoPiccardi问,重要的是要知道你的控制器是用Java还是Scala编写的 – biesior 2013-03-07 21:05:59

+0

java,对不起提及 – nightograph 2013-03-07 21:20:24

回答

4

在用于Java的Play Framework 2中,控制器必须传递默认值或null。 在其他模板中,您可以保留可选参数。

+0

我已经完成了同样的事情,因为我留下它作为评论,谢谢你的答案! – nightograph 2013-09-03 23:16:47

+0

@nightograph - 这是否基本上意味着在使用Java API播放时,模板语言中的默认参数被打破? 这似乎是一个错误,或者至少是一个非常理想的增强功能。有没有人有一个请求的参考?如果没有,我会放下一个来开始对话。 – alph486 2015-02-18 17:45:58

+0

@ alph486最近没有太多的发挥,你应该试验它与它的新版本 – nightograph 2015-03-04 17:00:56

7

作为解决方法,您可以将参数存储在Context.args地图中。这是一个Map<String,Object>,因此您可以存储当前请求所需的任何内容。

这是一种简单的方法,可以在您的模板中访问值,而无需声明/传递它们作为参数。

控制器

public static Result someAction() 
{ 
    ctx().args.put("msg", "Hello world!"); 

    return ok(myview.render()); 
} 

模板

@if(ctx.args.containsKey("msg")){ 
    <p>@ctx.args.get("msg")</p> 
} 
+0

这应该在他们的网站上的文档,没有任何臃肿的例子直接点。 – 2015-09-03 20:12:42

相关问题