0

我正在尝试开发一个 Liferay portlet 来存储用户的偏好。此 Portlet 将执行 AJAX 调用以刷新其内容并使用这些首选项来获取数据。为此,我正在使用com.liferay.portal.kernel.portlet.DefaultConfigurationAction。如果我没有对外观和感觉进行任何更改,一切都会正常工作。

但是,当我指定要链接到的页面时(外观 -> 将 Portlet URL 链接到页面),用户设置将消失,而将使用默认值。

通过调试器,我发现在应用外观和感觉更改时没有找到首选项。

有解决办法吗?

4

1 回答 1

1

我已经设法解决了这个问题。看来 Liferay 的 IPC 不能很好地与 AJAX 配合使用。

正如问题中提到的,我为此portlet 的内容设置了一个目标URL 指向。要为我使用的 AJAX 调用生成 URL

<portlet:resourceURL var="ajaxResourceURL" />

然而,这个标签会生成指向目标 URL 而不是当前页面本身的 URL。因此,当进行 AJAX 调用时,没有数据,因为目标页面没有相同的 portlet。

我对此的解决方法是使用 javascript 将生成的 URL 路径替换为当前页面的路径。

    var url = '<%= ajaxResourceURL %>';
    var path = url.substring(url.lastIndexOf("/") + 1, url.indexOf("?"));
    var pathname = window.location.pathname;

    pathname = pathname.substring(pathname.lastIndexOf("/") + 1, pathname.length);
    url = url.replace(path, pathname);

希望这将帮助那些将来面临同样问题的人。

于 2013-09-10T01:11:33.393 回答