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

我正在尝试使用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选择视图,以及如何选择要使用的视图.另外,关于执行管道的任何提纲都将非常有帮助

最佳答案
我找到了解决方案.您可以在传递给控制器​​动作的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");        

}

转载注明原文:java-Liferay Portlet基本MVC流程和视图选择 - 代码日志