2016-11-30 6 views
1

저는 현재 freemarker 언어를 사용하여 Liferay ADT에 어려움을 겪고 있습니다. 내가 원하는 것은 간단합니다. 웹 컨텐트 구조의 부울 필드를 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> 

내가 기능을 사용하지 않고 그것을 시도하기 때문에 코드가 작동 알고

이 코드를 활용하여 있음을 달성했다. 하지만 버튼 하나를 클릭하면 전체 활동이 실행되기를 원합니다. 그래서 내가하고 싶은 것은 폼이나 버튼에서 그 함수를 호출하는 것입니다. 나는이 작업을 수행 할 수없는 것 : 버튼의 onclick 이벤트에서 호출

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

습관 중 도움이됩니다.

그것은 말한다 :

문자열, 날짜 또는 여기에 번호를 기대, 표현이 만료 난에서 "만료"라는 함수를 호출 어떻게

그래서 그 대신 freemarker.core.Macro입니다 HTML 태그?

모든 의견을 크게 기뻐할 것입니다.

답변

1

expire은 함수이므로 ${expire()}과 같이 호출해야합니다. 그러나 함수에 반환 값 (no <#return someValue>)이 없으므로 오류가 발생합니다. ${...}에 무엇을 삽입 할 것으로 예상 되나요? #return#function 끝 부분에 삽입 할 것으로 예상됩니다.

expireArticle 변수를 다시 또 다시 지정하는 것은 의미가 없습니다. 당신은 오래된 값을 덮어 씁니다. 또한 함수 내부에서만 필요한 변수의 경우에는 <#local someVar = someValue>을 사용하는 것이 더 깔끔합니다.