0

我有一个播放应用程序(播放 1.2.4)。在我的应用程序的每个页面中,我都希望能够访问已登录的用户(使用 groovy)。所以我可以执行权限检查等。我试着把它放在主模板中,就在doLayout

#{set user:user/}

我可以在我的应用程序的主页中访问用户,但是当通过指向其他页面的链接时,我无法再访问用户变量。

4

1 回答 1

1

我认为您对在 Play!Framework 上使用#{set}和标记存在误解。#{get}查看文档#{set}#{get}标签。

我给你举个例子,你有三个模板,如下所示:

main.html

<html>
   <head>
       <title>#{get 'title' /}</title>
   </head>
   <body>
       #{doLayout /}
   </body>
</html>  

模板1.html

#{extends 'main.html' /}
#{set title:header /}

<p>This is template1.html page</p>

模板2.html

#{extends 'main.html' /}
#{set title:header /}

<p>This is template2.html page</p>

控制器上的方法如下:

public static void template1() {
    String header = "Template 1 Title"
    render(header);
}

public static void template2() {
    render();
}

这就是解释,当你渲染时template1.html,你可能会注意到我们在 中设置了页面标题(通过使用header变量)template1.html。我们设置的标题是main.html使用#{get}on检索的main.html

然后看你渲染的时候template2.html,你可能会注意到我们也设置了页面标题。但不同之处在于控制器template2()方法),您没有将header变量值传递给模板。因此,尽管您设置了标题,但标题具有 null 值,并且在您渲染时未设置标题的含义template2.html

因此,对于您的问题,我认为当您坚持放置#{set user:user /}模板并想要访问user变量时,您必须在渲染模板之前将user变量传递给所有控制器方法。呃..效率太低了!


建议

我建议您可以使用session来存储用户数据userid,因为它可以在您的所有应用程序模板中访问!请在此处查看文档。

希望这可以使您了解机制,并且会如此

于 2013-04-22T01:11:23.557 回答