Liferay ADT-来自本地窗体的Freemarker调用函数

Liferay ADT-来自本地窗体的Freemarker调用函数,liferay,liferay-6,freemarker,Liferay,Liferay 6,Freemarker,我目前正在努力使用Liferay ADT,使用freemarker语言。我想做的很简单。我只想将web内容结构中的布尔字段从true更改为false,反之亦然 通过使用此代码,我实现了以下目标: <#function expire> <#assign isActiveNode = docXml.selectSingleNode("//dynamic-element[@name='isActive']/dynamic-content") /> <#as

我目前正在努力使用Liferay ADT,使用freemarker语言。我想做的很简单。我只想将web内容结构中的布尔字段从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>

从ButtonOnClick事件调用它也不会有帮助

它说:

此处应为字符串、日期或数字,表达式应为expire 一个freemarker.core.Macro

那么如何从html标记中调用“expire”函数呢


任何想法都将不胜感激。

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

再三重复使用
expireArticle
变量也是毫无意义的;您只需覆盖旧值。此外,对于只需要在函数内部使用的变量,使用
更为简洁