2

如果在 Spring Portlet 控制器中,我有一个方法用 注释@ActionMapping,另一个方法用 注释@RenderMapping(params = "action=detail"),我看到从方法#1 到方法#2,我们不直接调用方法#2,而是Actionresponse.setRenderParameter("action", "detail")在方法#1 中设置一个方法#2 将从这里获取。

我的第一个问题是将渲染阶段与操作阶段(或者我应该说请求阶段)分开,我们可以获得什么优势?还有为什么我们不直接调用方法,而是通过设置渲染参数来调用方法?

4

2 回答 2

3

回答您的问题

  1. Portlet 可以在一个页面上共存。无论您在 portlet 上执行了什么操作,Portal 容器都会调用render()所有 portlet 上的方法来收集 html 片段并聚合它们,以准备整个页面视图并提供给浏览器。拥有 2 种方法不仅是一种优势,而且是实现上述分离业务逻辑要求的强制措施——processAction() 这可能会改变你的系统状态,正如@Mark Chorley 所说,你知道执行 “AND”渲染逻辑——render()这决定要渲染的视图,有时您不知道执行。

  2. 这很简单,尽管可以直接调用方法,但为什么要调用start()而不是调用。不应该直接调用该方法的原因有很多 run()Threadrun

    1. 您不对页面上所有 Portlet 的 html 片段的聚合负责。
    2. 您不是在render()感兴趣的 Portlet 的方法中提供公共呈现参数的人。
    3. 绝对不想将Events 委托给订阅的 portlet
于 2013-06-15T13:19:19.710 回答
1

这就是portlet 基本上所做的事情。至于您获得什么优势 - 它允许您将您的操作(通常是修改数据)与为您的视图准备数据分开。

Action 和 Render 都是单个请求的不同阶段。如您所说,操作请求先于渲染请求。“请求阶段”对我来说是一个令人困惑的术语。动作阶段和渲染阶段是更有用的术语。

为什么你不直接调用它——portlet 容器会为你做这件事。此外,您必须记住,渲染方法将在所有可见的 portlet 上调用,但操作请求将仅针对您的 portlet。

因此,假定 portlet 容器保证调用所有可见 portlet 上的所有呈现方法,仅仅因为操作请求以它为目标而在一个 portlet 上手动调用呈现方法是没有意义的。

如果您只有一个可见的 portlet,这可能不太清楚。当您在一个页面上有多个 portlet 时,这更有意义。

于 2013-04-16T19:56:56.463 回答