2016-11-30 13 views
1

我目前正在使用freemarker語言掙扎於Liferay ADT。我想做的事很簡單。我只想將Web內容結構中的布爾字段從true更改爲false,反之亦然。Liferay ADT - Freemarker從本地表單調用函數

我已經實現了利用此代碼:

<#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事件不會幫助要麼。

它說:

期待一個字符串,日期或數字在這裏,表達到期反而 一個freemarker.core.Macro

讓我怎麼稱之爲「過期」功能,從一個html標籤?

任何想法將不勝感激。

回答

1

由於expire是一個函數,你應該把它叫做${expire()}。但是,您的功能沒有返回值(沒有<#return someValue>),因此也會導致錯誤。我不確定你期望在${...}處插入什麼,但#return它在#function的末尾。

此外,再次重新分配expireArticle變量毫無意義;你只是覆蓋舊的價值。另外,對於只需要在功能內部使用的變量,使用<#local someVar = someValue>更清晰。