在Play Framework 2.3中生成指向控制器操作的链接

时间:2015-04-26 23:36:42

标签: html scala playframework-2.0

我正在使用Play应用程序,需要在调用控制器操作的混合Scala-HTML视图中生成链接。几年前我发现this问题与我的情况类似,但提供的答案对我不起作用。

元素是在循环中生成的,所以我不能手动将参数插入到控制器动作中,但我尝试过的任何东西都没有用。这就是我现在的路线:

<a href='@routes.Application.show("some")'>My link with some string</a>

我之前链接的问题的接受答案也有效地使用了这种结构:

data.$ set -- $(date "+%Y %m %d %T")
data.$ echo $*
2015 04 26 19:32:55
data.$ DATE_TIME="$1-$2-$3_$4"
data.$ echo $DATE_TIME
2015-04-26_19:32:55
data.$ DATE_TIME_1="$1.$2.$3, $4"
data.$ echo $DATE_TIME_1
2015.04.26, 19:32:55
data.$ 

我的问题有两个:

1)如何将变量fhirID传递给控制器​​动作?我生成的链接只有文本“fhirID”而不是语句第一部分生成的文本。

2)@ routes.Users语法是否正确?当我点击生成的链接时,它会尝试在/myapp/@routes.Users.fhirUserDetails(fhirID)上呈现页面

我意识到我可能在这里遗漏了一些非常基本的东西 - 感谢任何建议!

1 个答案:

答案 0 :(得分:2)

问题似乎不是@routes语法(你完全正确),而是一个Twirl引擎没有看到代码结束和HTML开始的情况(或者类似的东西......)< / p>

你所包含的行,包含var和分号,让我怀疑这一点,并且当我使用这种风格时我能够重现这个问题。

我的建议是使用@defining helper而不是var来获取用于链接的范围变量,如下所示:

ID: @defining(<processing for ID>) { fhirID => 
  <a href='@routes.Users.fhirUserDetails(fhirID)'>fhirID</a>
}

如果需要,您可以根据需要嵌套@defining块,但如果有很多逻辑,可能最好调用可重用块。我认为这种风格使得更易读的模板,并且看起来更像是“真正的Scala”: - )