我正在尝试使用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模式使用的视图。即。
this.viewTemplate = "/views/edit.jsp";
this.editTemplate = "/views/edit.jsp";
再次设置此参数后,只有在不通过actionURL访问时才会调用init()。
所以我想我的问题非常基本,如何选择视图以及如何在通过actionURL进行选择时使用。此外,执行管道的任何大纲都将非常有用
答案 0 :(得分:2)
我找到了解决方案。您可以在传递给控制器操作的ActionResponse对象上分配render参数。这告诉liferay加载提供的视图。即。
public void editSlide(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException, PortletException {
// action code goes here
// set up the view
actionResponse.setRenderParameter("mvcPath", "/views/edit.jsp");
}