0

我正在尝试使用 java 代码重定向到其他页面,但不知道为什么它没有被重定向。以下是以下代码

ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(WebKeys.THEME_DISPLAY);


PortletConfig portletConfig = (PortletConfig) actionRequest.getAttribute("javax.portlet.config");

String portletName = portletConfig.getPortletName();

PortletURL successPageURL = PortletURLFactoryUtil.create(
                actionRequest, portletName+ "_WAR_" + portletName + "portlet", 
                themeDisplay.getPlid(), PortletRequest.RENDER_PHASE);

successPageURL.setParameter("jspPage", LibraryConstants.PAGE_SUCCESS);
actionResponse.sendRedirect(successPageURL.toString());

它没有重定向到页面。请帮助检查代码是否正确。

谢谢。

4

4 回答 4

5

它没有重定向的问题是因为我们必须在 liferay-portlet.xml 中添加一个标签,该标签是

      <action-url-redirect>true</action-url-redirect>

在上面的行之后它起作用了。

于 2014-05-08T12:43:05.380 回答
4

我假设此代码位于操作方法或processAction方法中。

与其直接从动作阶段重定向,不如使用or方法actionResponse.sendRenderParameter("jspPage", LibraryConstants.PAGE_SUCCESS)设置jspPage要呈现的内容。renderdoView

sendRedirect检查文档也会有所帮助,其中提到在某些情况下它不会重定向。

另外请检查您在执行代码时是否收到任何错误或警告。

于 2014-05-03T09:23:42.390 回答
3

使用该代码,您不会重定向到另一个页面,您只是提供另一个 portlet 的 id - 不知道您希望转发到哪个页面。

我没有在周末提供快速检查的环境(抱歉),您可以尝试以下方法自己找到解决方案:

  • 检查您正在构建的 URL - 您会看到它指向您所在的当前页面。
  • 找到一种方法来实际提供您要重定向到的页面的名称。提示:您要重定向到的 portlet 可以放在许多页面上,也可以不放在任何页面上。您必须要么动态地找到它所在的页面之一(并希望它是您真正想要的页面),要么以某种方式对其进行配置。
  • 此外,在架构上,我发现“仅”链接到一个简单的页面,而不是链接到目标页面上的 portlet 的 URL 要好得多。否则,您会将两个不同的 portlet 非常紧密地耦合在一起 - 对一个的更改可能需要反映在另一个中。而是使用参数(例如公共渲染参数)在不同的 portlet 之间进行通信——而不是或多或少地直接寻址另一个 portlet。

我希望这可以帮助您自己找到解决方案,因为我在这台计算机上没有可用的 IDE 来提供示例代码。

于 2014-05-04T09:22:13.723 回答
0

您需要先找到该页面的 URL。您可以从友好的 URL ( friendlyURL) 获取它:

  1. ThemeDisplay theme = (ThemeDisplay) getPortletRequest().getAttribute(WebKeys.THEME_DISPLAY);

  2. final long GROUP_ID = theme.getLayout().getGroupId(); Layout destinationLayout = LayoutLocalServiceUtil.getFriendlyURLLayout(GROUP_ID, false, friendlyUrl);

  3. Layout layout = LayoutLocalServiceUtil.getLayout(destinationLayout.getPlid()); String completeUrl = PortalUtil.getLayoutFullURL(layout, getThemeDisplay());

于 2015-04-29T09:36:54.283 回答