【问题标题】:Generating a link to a controller action in Play Framework 2.3在 Play Framework 2.3 中生成指向控制器操作的链接
【发布时间】:2015-07-05 06:27:12
【问题描述】:

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

元素是在循环中生成的,因此我无法手动将参数插入控制器操作,但我尝试过的任何方法都没有奏效。这是我现在的行:

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)

处呈现页面

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

【问题讨论】:

    标签: html scala playframework-2.0


    【解决方案1】:

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

    您包含的行同时包含var 和分号,这让我怀疑这一点,并且当我使用该样式时,我已经能够重现该问题。

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

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

    如果有必要,您可以尽可能多地嵌套@defining 块,但如果有很多逻辑,调用可重用块可能会更好。我认为这种风格使模板更具可读性,并且在某种程度上看起来更像“真正的 Scala”:-)

    【讨论】:

    • 非常感谢!正如您可能知道的那样,我是 Play 和 Scala 的新手。您的建议非常有效,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 2010-10-22
    相关资源
    最近更新 更多