小编典典

Liferay Portlet基本MVC流程和视图选择

java

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

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

使用LifeRay MVCPortlet不能像这样工作。至少可以生成两种类型的网址-呈现网址和操作网址。

呈现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";

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

所以我想我的问题很基本,如何通过actionURL选择视图以及如何选择视图。另外,关于执行管道的任何提纲都会非常有帮助


阅读 208

收藏
2020-11-30

共1个答案

小编典典

我找到了解决方案。您可以在传递给控制器​​动作的ActionResponse对象上分配渲染参数。这告诉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");

}
2020-11-30