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

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

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

使用LifeRay MVCPortlet它不会像这样工作; 可以生成至少两种类型的URL – 呈现URL和动作URL。

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

 

操作URL通过控制器,操作被调用,然后默认视图用于呈现portlet,无论我作为mvc路径提供什么。

  

通过类树读取我可以看到一个属性用于定义根据portlet模式使用的视图。 即

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

再次在init()之后设置它只在没有通过actionURL访问时似乎有任何影响。

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

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