无法重定向到liferay中的其他页面

时间:2014-05-02 13:15:10

标签: liferay liferay-6 liferay-theme liferay-ide liferay-velocity

我正在尝试使用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 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:4)

我假设此代码采用操作方法或processAction方法。

最好不要直接从动作阶段重定向,而是使用actionResponse.sendRenderParameter("jspPage", LibraryConstants.PAGE_SUCCESS)设置jspPage通过renderdoView方法进行渲染。

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

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

答案 2 :(得分:3)

使用该代码,您不会重定向到另一个页面,您只需要提供另一个portlet的ID - 您无需知道要转发到哪个页面。

我没有在周末快速检查的环境(对不起),您可以尝试自己找到解决方案:

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

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

答案 3 :(得分:0)

您需要先找到该网页的网址。您可以从友好的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());