【问题标题】:Liferay ADT - Freemarker Call Function From A Local FormLiferay ADT - 从本地表单调用 Freemarker 函数
【发布时间】:2017-04-14 08:02:42
【问题描述】:

我目前正在努力使用 Freemarker 语言的 Liferay ADT。我想做的很简单。我只想将网络内容结构中的布尔字段从 true 更改为 false,反之亦然。

我通过使用这段代码实现了这一点:

<#function expire>    
<#assign isActiveNode = docXml.selectSingleNode("//dynamic-element[@name='isActive']/dynamic-content") />
    <#assign journalArticleLocalService = serviceLocator.findService("com.liferay.portlet.journal.service.JournalArticleLocalService")>
    <#assign expireArticle = isActiveNode.setText("false") />
    <#assign expireArticle = article.setContent(docXml.asXML()) />
    <#assign expireArticle = journalArticleLocalService.updateJournalArticle(article) />
</#function>

我知道代码有效,因为我在没有使用函数的情况下尝试了它。但我希望通过单击按钮触发整个活动。所以我想做的是从表单或按钮调用该函数。我似乎无法做到这一点:

<form action="${expire}" method="post">
<input type="submit" value="Expire" class="btn btn-success"/>
</form>

从按钮 onclick 事件中调用它也无济于事。

上面写着:

这里期望的是字符串、日期或数字,而 Expression expire 是 一个freemarker.core.Macro

那么如何从 html 标签中调用“过期”函数呢?

任何想法将不胜感激。

【问题讨论】:

    标签: liferay liferay-6 freemarker


    【解决方案1】:

    由于expire 是一个函数,你应该像${expire()} 一样调用它。但是,您的函数没有返回值(没有&lt;#return someValue&gt;),因此也会导致错误。我不确定你希望在${...} 处插入什么,但#return 它位于#function 的末尾。

    此外,一次又一次地重新分配给expireArticle 变量是没有意义的;您只需覆盖旧值。此外,对于只需要在函数内部的变量,使用&lt;#local someVar = someValue&gt; 会更简洁。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-04
      • 2015-09-04
      • 1970-01-01
      • 2018-08-24
      • 2020-11-06
      • 2017-02-15
      • 2018-02-03
      • 1970-01-01
      相关资源
      最近更新 更多