当前位置: 首页 > 面试题库 >

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

葛承嗣
2023-03-14
问题内容

我正在尝试使用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");

}


 类似资料:
  • 主要内容:一、基本框架,二、主要流程,三、源码,四、总结一、基本框架 整体的框架其实和普通的C/S服务器模式的应用程序没有本质的不同,只是MySql更显复杂一些。服务端启动网络服务进行网络监听,用户通过客户端复用网络通信来和服务端进行通信。在服务端要有一些基础的方法解释,这有些类似于编译器对源码的处理,但此处的SQL要简单很多。主要的功能框架如下图:   这幅图和上篇文章的图其实是一样的,只是这里进行了一些细节的表述,更容易理解。 二、主要流程 主要的

  • 你修改了项目的几个地方,先把修改放到暂存区,然后再去提交一下。 查看状态 查看当前都修改了项目的哪些东西。 git status 添加修改 添加要保存的修改的地方。 git add 提交修改 把添加的修改提交到 Git 仓库。 git commit 查看历史 看一下项目都做了哪些提交。 git log 练习 1,先查看一下之前我们创建的项目当前状态。执行: git status 返回:

  • 主要内容:视图,视图的分类,视图解析器,同时配置多个视图解析器,视图控制器Spring MVC 的控制器方法支持 ModelAndView、ModelMap、View、String 多种类型的返回值,但无论控制器方法的返回值是哪种类型,Spring MVC 内部最终都会将它们封装成一个 ModelAndView 对象。 ModelAndView 对象由 model(模型数据)和 view(视图)两部分组成,但这里的 view 通常并不是一个真正的 View 视图对象,而

  • (以一个简单的Websocket聊天室服务端为例) 1、任意位置建立项目目录 如 SimpleChat/ 2、引入Workerman/Autoloader.php 如 require_once '/your/path/Workerman/Autoloader.php'; 3、选定协议 这里我们选定Text文本协议(WorkerMan中自定义的一个协议,格式为文本+换行) (目前WorkerMan支

  • (以一个简单的Websocket聊天室服务端为例) 1、任意位置建立项目目录 如 SimpleChat/ 2、引入Workerman/Autoloader.php 如 require_once '/your/path/Workerman/Autoloader.php'; 3、选定协议 这里我们选定Text文本协议(WorkerMan中自定义的一个协议,格式为文本+换行) (目前WorkerMan

  • 我想要小费。如果您有一个JFrame,其中有许多JPanels,这些JPanels有十个JTextFields标签和一个Edit按钮,那么您将如何构造您的应用程序。 您是将所有代码放在JFrame中,还是从JPanel扩展并将所有代码包含在JFrame中? 纽扣呢?我想使用MVC模式,您将如何处理ActionListeners?是每一个都有一个自己的控制器,还是你只使用一个控制器?