繁体   English   中英

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

[英]Generating a link to a controller action in Play Framework 2.3

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

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

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

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

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

我的问题是双重的:

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM