【问题标题】:executing portlet event phase without render phase在没有呈现阶段的情况下执行 portlet 事件阶段
【发布时间】:2014-02-20 14:08:24
【问题描述】:

我需要在处理 Action 或 Event 阶段后取消执行 renderProcessing(doView 方法)(因为我不希望刷新整个页面或任何 portlet)。诸如 ajax 资源获取之类的东西不会导致刷新所有 portlet(我的意思是 serveResource 方法)。我们能否在 ProcessAction 或 ProcessEvent 的末尾使用“destroy()”方法来阻止 renderPhase 执行。我在我的portlet 中广泛使用MVCPortlet 框架和事件ipc。感谢您的帮助。

【问题讨论】:

  • 不,你不能。你只能重写destroy方法,这个方法应该被容器调用。为什么不使用 ajax 和 serveResource?
  • 因为我的 Portlet 接收事件并将事件发送到其他 Portlet 以运行多阶段流程,并且我不想让他们在每个事件处理中刷新页面。也许我应该重写 doView 进程以根据某些条件或参数忽略某些特定的 renderRequset(但是如何?)

标签: events liferay portlet


【解决方案1】:

正如 Georgy Gobozov 在评论中所说:您的问题的答案是“否”。

如果您正在使用标准的 portlet 请求处理并依赖于事件处理,那么您将不得不重新加载整个页面。没有什么可以阻止您实现自定义事件处理(例如,在浏览器上使用 JS,通过您的业务层等),但不幸的是,您必须这样做。

当您启动原始请求时,例如通过一个动作处理程序,页面已经开始重新加载(从浏览器的角度来看)。任何取消处理服务器端的尝试都将导致流中断并且浏览器在页面上发出错误信号(例如“无法加载”:结果必须带有 HTTP 状态 - 这很可能是一个错误代码(例如 50x),或者它必须包含整个页面的 HTML。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 2018-03-13
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多