2016-11-30 3 views
1

В настоящее время я борюсь с Liferay ADT, используя язык freemarker. То, что я хочу сделать, просто. Я просто хочу изменить логическое поле в структуре веб-контента от 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 событие не поможет ни.

Он говорит:

Ожидая строка, дата или номер здесь, Expression истекают вместо этого freemarker.core.Macro

Итак, как я называю, что «истекает» функцию от тег html?

Любые мысли были бы весьма благодарны.

ответ

1

Как функция expire является функцией, вы должны называть ее ${expire()}. Однако ваша функция не имеет возвращаемого значения (нет <#return someValue>), так что это также вызовет ошибку. Я не уверен, что вы ожидаете вставить в это ${...}, но #return это в конце #function.

Также бессмысленно повторно переходить к переменной expireArticle снова и снова; вы просто перезаписываете старое значение. Кроме того, для переменных, которые вам нужны только внутри функции, чище использовать <#local someVar = someValue>.

Смежные вопросы