在 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'>

printPageasset_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 模板中的会话属性

我的 Freemarker ObjectWrapper 如何访问模板设置

Netsuite / Freemarker - 访问电子邮件模板中的交易行级别数据

Freemarker 模板从路径 WEB-INF\ftl\ 访问 Freemarker 文件

##Freemarker模板引擎的分享