Liferay ADT - 从本地表单调用 Freemarker 函数
Liferay ADT - Freemarker Call Function From A Local Form
我目前正在使用 freemarker 语言与 Liferay ADT 作斗争。我想做的很简单。我只想将 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>
我知道代码有效,因为我在不使用函数的情况下尝试了它。但我希望整个 activity 通过单击按钮触发。所以我想做的是从表单或按钮调用该函数。我似乎无法做到这一点:
<form action="${expire}" method="post">
<input type="submit" value="Expire" class="btn btn-success"/>
</form>
从按钮的 onclick 事件调用它也无济于事。
它说:
Expecting a string, date or number here, Expression expire is instead
a freemarker.core.Macro
那么如何从 html 标签调用 "expire" 函数?
如有任何想法,我们将不胜感激。
因为expire
是一个函数,你应该像${expire()}
那样调用它。但是,您的函数没有 return 值(没有 <#return someValue>
),因此也会导致错误。我不确定您希望在那个 ${...}
处插入什么,但是 #return
它在 #function
.
的末尾
同样,一次又一次地重新赋值给 expireArticle
变量是没有意义的;您只需覆盖旧值即可。此外,对于您只在函数内部需要的变量,使用 <#local someVar = someValue>
.
更简洁
我目前正在使用 freemarker 语言与 Liferay ADT 作斗争。我想做的很简单。我只想将 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>
我知道代码有效,因为我在不使用函数的情况下尝试了它。但我希望整个 activity 通过单击按钮触发。所以我想做的是从表单或按钮调用该函数。我似乎无法做到这一点:
<form action="${expire}" method="post">
<input type="submit" value="Expire" class="btn btn-success"/>
</form>
从按钮的 onclick 事件调用它也无济于事。
它说:
Expecting a string, date or number here, Expression expire is instead a freemarker.core.Macro
那么如何从 html 标签调用 "expire" 函数?
如有任何想法,我们将不胜感激。
因为expire
是一个函数,你应该像${expire()}
那样调用它。但是,您的函数没有 return 值(没有 <#return someValue>
),因此也会导致错误。我不确定您希望在那个 ${...}
处插入什么,但是 #return
它在 #function
.
同样,一次又一次地重新赋值给 expireArticle
变量是没有意义的;您只需覆盖旧值即可。此外,对于您只在函数内部需要的变量,使用 <#local someVar = someValue>
.