gpt4 book ai didi

liferay - 为什么要使用PortletURL?

转载 作者:行者123 更新时间:2023-12-02 13:57:59 25 4
gpt4 key购买 nike

这个帖子不是一个问题,而是我在浏览 Liferay 论坛时关于使用 PortletURL 时提出的疑问。

在某些情况下,我会在 javscript 方法中看到此 PortletURL

function createRowURL() {
var portletURL = new Liferay.PortletURL();
portletURL.setParameter("rowNumber", "25" );
return portletURL.toString();
}

在某些情况下,我会在 doView 方法中看到此 PortletURL,如图所示

获取当前URL:

PortletURL url = PortletURLUtil.getCurrent(renderRequest, mimeResponse or renderResponse)

从 renderResponse 创建 PortletURL:

  1. 对于 RenderURL:

    PortletURL renderURL = renderResponse.createRenderURL(); 
  2. 对于actionURL:

    PortletURL actionURL = renderResponse.createActionURL();

有人可以告诉我在什么情况下 PortletURL 会有用吗?

最佳答案

Portlet 应用程序与普通的 Web 应用程序不同。 Portlet 是称为门户的父页面内的迷你页面,多个门户成为一本书(Weblogic 术语)。普通 URL 在这种情况下将不起作用。除了上面给出的原因之外,Portlet 还具有具有不同状态的生命周期。您必须为 Portlet 容器提供一种方法来确定哪个 Portlet 正在与其通信以及它所处的状态(例如 Portlet 的窗口状态)是最小化、最大化还是正常。当然,PortletUrl的另一个重要作用是携带请求参数。如果您正在查看 PortletURL,您肯定会看到很多奇特的名称以及您提供的请求参数。

虽然 PortletURL 所需的大多数信息在许多情况下都很常见,但 PortletURL 的结构是依赖于实现的,并且它是由 Portlet 容器以某种方式生成的。自从我上次体验 Liferay 以来已经有一段时间了。我从未在我的应用程序中使用过 liferay 特定的 javascript。我使用自己的 javascript/ajax 与门户容器进行通信。所以我只是猜测您提出的 javascript 方式也是 liferay 特定的,并且不能在不同的门户框架之间移植。

编辑:根据 @PrakashK 的评论添加了 PortletURL 的类型及其差异和用法。

PortletURL 有两种类型:

  1. 操作 URL,它们会触发操作请求,然后触发渲染请求。
  2. 渲染 URL,它们会触发渲染请求。

因此,ActionURL 的目的是触发某种操作 - 例如按下按钮。操作请求将被 portlet 容器拦截并发送到适当的操作请求处理程序,该处理程序处理操作请求并设置呈现阶段要使用的必要呈现参数。在 Portlet 的生命周期中,呈现请求始终跟在操作请求之后。另一方面,RenderURl,顾名思义,主要用于呈现 portlet。

由于 RenderURL 的“呈现”性质,在 JSR168(Portlet 1.0) 中,您无法直接通过 Portlet 提供动态生成的资源。唯一的解决方法是使用额外的 servlet 来提供资源。这种方法的最大问题是 Servlet 无法参与 Portlet 的生命周期。不保证到同一 Portlet Web 应用程序中的资源的直接链接能够通过门户服务器,并且不会有可用的 Portlet 上下文。为了克服这个问题,在 JSR286(Portlet 2.0) 中,引入了一种称为资源服务的功能和一种称为 ResourceURL 的新型 URL,以使 Portlet 能够动态地提供资源。 ResourceURL 不是 PortletURL,尽管它们扩展了相同的 BaseURL。 ResourceURL 和 ActionURL 之间最大的区别是 ResourceURL 不会触发渲染请求。这使得对资源的 Ajax 请求成为可能。

有关Portlet 2.0的更多信息,请参阅 [JSR286] .

希望以上信息对您有用。

关于liferay - 为什么要使用PortletURL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10181047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com