0

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

查看映射

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

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

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

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

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

4

1 回答 1

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() 将简单地调用闭包并重定向到视图。普洱茶

于 2012-06-21T13:49:32.483 回答