使用Grails Portlet插件切换视图

时间:2012-06-20 15:07:51

标签: grails liferay portlet

我一直在尝试使用Grails Portlet插件和Liferay,但无论教程说什么,我似乎都无法呈现不同的页面:

  

查看映射

     

对于那些支持它的请求类型('resource','render'),可以通过让portlet动作闭包返回一个map来返回一个模型。模型将使用以下规则(按先例顺序)传递给视图:

     
      
  1. 'XXX / xyz.gsp'其中'XXX'是portlet的名称(例如XXXPortlet.groovy),'xyz'是请求中'action'参数的值。

  2.   
  3. 'XXX / MODE.gsp'其中'XXX'是portlet的名称(例如XXXPortlet.groovy),'MODE'是当前的portlet模式(例如'view')

  4.   
  5. 'XXX / render.gsp'

  6.   

到目前为止,我已经能够通过此代码触发特定操作:

<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将呈现一个空白页面,我似乎无法在日志中找到它试图找到的页面。

对此有任何帮助都很棒,谢谢!

1 个答案:

答案 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。