我一直在尝试使用Grails Portlet插件和Liferay,但无论教程说什么,我似乎都无法呈现不同的页面:
查看映射
对于那些支持它的请求类型('resource','render'),可以通过让portlet动作闭包返回一个map来返回一个模型。模型将使用以下规则(按先例顺序)传递给视图:
'XXX / xyz.gsp'其中'XXX'是portlet的名称(例如XXXPortlet.groovy),'xyz'是请求中'action'参数的值。
'XXX / MODE.gsp'其中'XXX'是portlet的名称(例如XXXPortlet.groovy),'MODE'是当前的portlet模式(例如'view')
- 醇>
'XXX / render.gsp'
到目前为止,我已经能够通过此代码触发特定操作:
<form method="post" action="${portletResponse.createActionURL()}">
<input type="hidden" name="action" value="testPage"/>
<input type="submit" value="action">
</form>
将触发代码块:
def testPage = {
println "TESTPAGE METHOD"
}
然而,之后它将始终呈现View.gsp,不像它说的XXX / testPage.gsp会起作用。
此外,我尝试使用createRenderURL()而不是createActionURL(),但portlet将呈现一个空白页面,我似乎无法在日志中找到它试图找到的页面。
对此有任何帮助都很棒,谢谢!
答案 0 :(得分:0)
最后通过深入了解插件groovy并想要为其他任何有问题的人记录答案。您必须使用portletResponse.createRenderURL()作为操作,此外必须从调用的方法返回一个映射。
以下是一个例子:
<form method="post" action="${portletResponse.createRenderURL()}">
<input type="hidden" name="action" value="testPage"/>
<input type="submit" value="submit">
</form>
将调用以下代码并将其呈现给XXX / testPage.gsp视图
def testPage = {
println "TESTPAGE METHOD"
['PageProperty1':'foo', 'PageProperty2':'bar']
}
这里需要注意的重要一点是createRenderURL()将只调用action参数值指定的闭包,并重定向到该页面,如果它存在,createActionURL()将只调用闭包和重定向to view.gsp。