在 Freemarker 模板中访问 portlet 命名空间
Posted
技术标签:
【中文标题】在 Freemarker 模板中访问 portlet 命名空间【英文标题】:Access portlet namespace in Freemarker template 【发布时间】:2018-05-14 05:50:38 【问题描述】:我正在使用 freemarker 模板来显示资产发布者中列出的 Web 内容。
在模板中,我尝试分配 portlet 命名空间,以便像这样使用一些资产功能(例如打印条目)
<#attempt>
<#assign namespace = request["portlet-namespace"]>
<#recover>
<#assign namespace = 'undefined'>
</#attempt>
所以,打印按钮是下面的代码
<a href="javascript:$namespaceprintPage_0();" title='Print'>
printPage
是asset_print.jspf
中liferay资产发布者代码中使用的方法
嗯,一切正常:在浏览器中检查页面时,我验证了命名空间已被计算并分配给命名空间变量(UI 中没有显示错误)。但是,每次用户尝试从资产发布者那里查看整个 Web 内容(即点击阅读更多)时,liferay 门户都会记录以下内容
Expression request["portlet-namespace"] is undefined on line
有人见过这个问题吗?还有其他方法可以在 freemarker 模板中获取 portlet-namespace 吗?
【问题讨论】:
【参考方案1】:#attempt
/#recover
不用于从正常情况下恢复,默认情况下会在恢复时记录错误(以便向操作员发出警报)。您应该改用 exp!default
运算符:
<#assign namespace = request["portlet-namespace"]!'undefined'>
(虽然我不确定为什么打印 undefinedprintPage_0();
有意义,但这是一个不同的问题。)
【讨论】:
以上是关于在 Freemarker 模板中访问 portlet 命名空间的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Freemarker 模板中访问 Spring 应用程序属性?
我的 Freemarker ObjectWrapper 如何访问模板设置
Netsuite / Freemarker - 访问电子邮件模板中的交易行级别数据