1

我正在尝试使用 LifeRay 6.1 开发一个基本的 portlet。我精通各种 MVC 实现,但我发现 Liferay / java portlet 有点令人困惑——尤其是执行管道。

对于我使用过的大多数 MVC 框架,前提是简单的请求 > 路由器 > 控制器 > 视图。视图选择通常基于控制器/动作命名约定,随请求传入的参数或手动加载到控制器动作中。

使用 LifeRay MVCPortlet 它不能像这样工作;至少可以生成两种类型的 URL - 渲染 URL 和操作 URL。

渲染 URL 似乎完全绕过了我认为的控制器——MVCPortlet 的子类。似乎这些 url 相对容易生成并且请求加载了预期的视图,如果您可以调用它,考虑到所有意图和目的,它完全绕过控制器并且与模型无关。

<portlet:renderURL var="badminURL"><portlet:param name="mvcPath" value="/views/edit.jsp" /></portlet:renderURL>

动作 URL 通过控制器,调用动作,然后使用默认视图呈现 portlet,而不管我作为 mvc 路径提供什么。

<portlet:actionURL var="adminURL" name="editSlide"><portlet:param name="mvcPath" value="/views/edit.jsp" /></portlet:actionURL>

阅读类树,我可以看到一个属性用于定义根据 portlet 模式使用的视图。IE

this.viewTemplate = "/views/edit.jsp";
this.editTemplate = "/views/edit.jsp";

在调用 init() 之后再次设置它似乎只有在不通过 actionURL 访问时才有效。

所以我想我的问题是非常基本的,如何选择视图以及如何在通过 actionURL 时选择要使用的视图。此外,任何关于执行管道的大纲都会非常有帮助

4

1 回答 1

2

我找到了解决方案。您可以在传递给控制器​​操作的 ActionResponse 对象上分配渲染参数。这告诉 liferay 加载提供的视图。IE

public void editSlide(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException, PortletException {

    // action code goes here

    // set up the view
    actionResponse.setRenderParameter("mvcPath", "/views/edit.jsp");        

}
于 2013-04-03T18:22:02.177 回答