关于 freemarker 模板的建议,想要创建一个主模板
我想创建一个所有其他视图页面都将继承的主模板。
因此主模板将具有:
HEADER
--CONTENT--
FOOTER
标头将选择性地显示(如果用户已登录)、用户名和其他用户对象属性。
--CONTENT-- 是其他“继承”视图页面将其内容注入其中的占位符。
--CONTENT--
所以我的问题是,这可以用 freemarker 实现吗?如果是这样,有什么指导吗?
如何将用户对象从控制器操作传递到标头?理想情况下,该对象将被传递到每个视图页面之外的其他地方(以避免必须在每个视图页面上维护此代码)。
I want to create a master template that every other view page will inherit.
So the master template will have:
HEADER
--CONTENT--
FOOTER
the header will optionally show (if the user is logged in), the username and other user object properties.
the --CONTENT-- is a placeholder that other 'inheriting' view pages will inject their content into.
So my questions are, is this possible with freemarker? If so, any guidance?
How would I pass the user object to the header from my controller actions? ideally the object would be passed in somewhere OTHER than each and every view page (to avoid having to maintain this code on each and every view page).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
是的,这是可能的。在我们的应用程序中,诸如用户对象之类的东西存在于会话范围中,但这可以是 freemarker 可以访问的任何范围:
您可以省略
Session.
并且 Freemarker 将在各个范围中搜索给定的变量名称。要注入内容,请将其包含在主模板中您希望视图页面放置其内容的位置:
然后视图页面声明其对主模板的使用,如下所示:
Yes, it's possible. In our applications things like the user object exist in session scope, but this could be any scope freemarker has access to:
You can omit the
Session.
and Freemarker will search the various scopes for the given variable name.To inject the content, include this at the point in the master template where you'd like the view page to put its content:
The view pages then declare their use of the master template as follows:
我进行了 Freemarker 模板继承 - https://github.com/kwon37xi/freemarker-template-inheritance
我想这就是你想要的。它在 freemarker 2.3.19 上进行了测试。
I made Freemarker template inheritance - https://github.com/kwon37xi/freemarker-template-inheritance
I think it's what you want. It is tested on freemarker 2.3.19.
我实现了这样的东西:
base.ftl
然后index.ftl将继承样板模板为:
这个网站对上面的代码参考很有帮助
https://nickfun.github.io/posts/2014/freemarker-模板继承.html
I implemented something like this:
base.ftl
then index.ftl will inherit the boilerplate templates as:
this site was helpful for the above code reference
https://nickfun.github.io/posts/2014/freemarker-template-inheritance.html
在较新的 Freemarker 版本中,<#nested> 元素非常有用:
base.ftl:
baseWithDownloadButton.ftl:
In newer Freemarker versions, the <#nested> element is extremely useful:
base.ftl:
baseWithDownloadButton.ftl: