Foren

Redirecting back to view mode after submitting form in edit mode?

Phoenix Zerin, geändert vor 12 Jahren.

Redirecting back to view mode after submitting form in edit mode?

Junior Member Beiträge: 60 Beitrittsdatum: 28.06.11 Neueste Beiträge
A user clicks on the "Preferences" link in the portlet titlebar to go to the portlet's edit mode. He edits his preferences and submits the form on the edit view. Once the portlet has saved the user's preferences, how can I get it to redirect the browser back to the portlet's view URL?

I've figured out how to forward the response, but I cannot find a way to do a redirect.

edit.jsp:
<portlet:actionurl name="setConfigurationValues" var="submitURL" />

<aui:form action="<%= submitURL %>" method="post" name="form">
  ...
</aui:form>


MyPortletClass.java:
  public void setConfigurationValues(
    ActionRequest request, ActionResponse response)
  {
    ...

    /** @todo Redirect instead of forwarding. */
    response.setPortletMode(PortletMode.VIEW);
    response.setWindowState(WindowState.NORMAL);
  }
thumbnail
Thiago Leão Moreira, geändert vor 12 Jahren.

RE: Redirecting back to view mode after submitting form in edit mode?

Liferay Legend Beiträge: 1449 Beitrittsdatum: 10.10.07 Neueste Beiträge
Everything seems to be right. No exception in logs?
thumbnail
Thiago Leão Moreira, geändert vor 12 Jahren.

RE: Redirecting back to view mode after submitting form in edit mode?

Liferay Legend Beiträge: 1449 Beitrittsdatum: 10.10.07 Neueste Beiträge
humm, try to only set the PortletMode, no WindowState.
Phoenix Zerin, geändert vor 12 Jahren.

RE: Redirecting back to view mode after submitting form in edit mode?

Junior Member Beiträge: 60 Beitrittsdatum: 28.06.11 Neueste Beiträge
Hey Thiago. Thanks for the feedback.

Everything works as expected; the portlet displays in view mode, there's no exceptions in the logs... but, the URL does not change (it still shows p_p_mode=edit in the query string), and if I click on my browser's refresh button, my browser asks me if I want to re-submit the form.
thumbnail
Thiago Leão Moreira, geändert vor 12 Jahren.

RE: Redirecting back to view mode after submitting form in edit mode?

Liferay Legend Beiträge: 1449 Beitrittsdatum: 10.10.07 Neueste Beiträge
Humm! To fix this create a new render url for this portlet and call the sendRedirect method. Let me know.
Phoenix Zerin, geändert vor 12 Jahren.

RE: Redirecting back to view mode after submitting form in edit mode?

Junior Member Beiträge: 60 Beitrittsdatum: 28.06.11 Neueste Beiträge
Apologies; I'm a little new to Liferay, and I'm not sure how to do that.

It looks like if I use <portlet:renderURL /> in my JSP that it's invoking com.liferay.taglib.portlet.RenderURLTag, whose implementation looks... complicated. If I want to create a render URL in my portlet class, should I use a RenderURLTag instance, or is there a better way?
thumbnail
Thiago Leão Moreira, geändert vor 12 Jahren.

RE: Redirecting back to view mode after submitting form in edit mode?

Liferay Legend Beiträge: 1449 Beitrittsdatum: 10.10.07 Neueste Beiträge
Try this:

public void setConfigurationValues(
    ActionRequest request, ActionResponse response)
  {
    ...

    PortletURL url = response.createRenderURL();

    url.setPortletMode(PortletMode.VIEW);
    url.setWindowState(WindowState.NORMAL);

   response.sendRedirect(url.toString());
  }
Phoenix Zerin, geändert vor 12 Jahren.

RE: Redirecting back to view mode after submitting form in edit mode?

Junior Member Beiträge: 60 Beitrittsdatum: 28.06.11 Neueste Beiträge
That looks really good, though it looks like createRenderURL() isn't part of ActionResponse:

20:10:23,391 ERROR [jsp:154] java.lang.Error: Unresolved compilation problem:
The method createRenderURL() is undefined for the type ActionResponse
thumbnail
Thiago Leão Moreira, geändert vor 12 Jahren.

RE: Redirecting back to view mode after submitting form in edit mode?

Liferay Legend Beiträge: 1449 Beitrittsdatum: 10.10.07 Neueste Beiträge
Alright! Makes sense.

Use the class com.liferay.portlet.PortletURLFactoryUtil to create the PortletURL.
Phoenix Zerin, geändert vor 12 Jahren.

RE: Redirecting back to view mode after submitting form in edit mode? (Antwort)

Junior Member Beiträge: 60 Beitrittsdatum: 28.06.11 Neueste Beiträge
Thanks Thiago. Working off of that, I came across this article, which suggests the following:

We perform a redirect operation, by creating a portletURL dynamically. This is done as follows.

String portletName = (String)actionRequest.getAttribute(WebKeys.PORTLET_ID);      (A)       
       
        PortletURL redirectURL =   PortletURLFactoryUtil.create(PortalUtil.getHttpServletRequest(actionRequest),  
      porltetName,  
       themeDisplay.getLayout().getPlid(), PortletRequest.RENDER_PHASE);                 (B)
     
       redirectURL.setParameter("jspPage", "relative path to viewbook.jsp");    
       redirectURL.setParameter("bookId", bookId);                                                 
          
      actionResponse.sendRedirect(redirectURL.toString());                                        (C)


I was able to modify my portlet action as follows:

    /* Redirect back to view mode. */
    ThemeDisplay themeDisplay =
      (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
    PortletURL redirect =
      PortletURLFactoryUtil.create(
        PortalUtil.getHttpServletRequest(request), this.getPortletName(),
        themeDisplay.getLayout().getPlid(), PortletRequest.RENDER_PHASE);
    redirect.setPortletMode(PortletMode.VIEW);
    redirect.setWindowState(WindowState.NORMAL);
    response.sendRedirect(redirect.toString());


That is a bucketload of code just to do a redirect, though; is there any way to simplify this?
thumbnail
Thiago Leão Moreira, geändert vor 12 Jahren.

RE: Redirecting back to view mode after submitting form in edit mode?

Liferay Legend Beiträge: 1449 Beitrittsdatum: 10.10.07 Neueste Beiträge
AFAIK no!

Actually I think you can remove PortalUtil.getHttpServletRequest(request) and use just request
thumbnail
Suraj Bihari, geändert vor 12 Jahren.

RE: Redirecting back to view mode after submitting form in edit mode?

Junior Member Beiträge: 41 Beitrittsdatum: 20.05.11 Neueste Beiträge
Thanks for clearing this out.
thumbnail
Aliabbas Surti, geändert vor 9 Jahren.

RE: Redirecting back to view mode after submitting form in edit mode?

New Member Beiträge: 11 Beitrittsdatum: 07.05.13 Neueste Beiträge
Thanks Phoenix for raising the question and providing the code snippet. That helped a lot.