Search code examples
controllerliferayportletspring-portlet-mvc

Passing value from action phase to render phase in portlets


I want to pass string value from action phase to render phase. In these two tutorials tut1 and tut2 its said i can do it by :

During action(), you can call ActionResponse.setRenderParameter() method to set any String values and retrieve the same using RenderRequest.getParameter() in the following render calls.

Here is controller of my view mode

GraphViewController.java

package graphui;

import com.liferay.portal.kernel.util.ParamUtil;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.portlet.ModelAndView;
import org.springframework.web.portlet.bind.annotation.ActionMapping;
import org.springframework.web.portlet.bind.annotation.RenderMapping;
import org.springframework.web.portlet.bind.annotation.ResourceMapping;

/**
 *
 * Controller for VIEW mode of portlet.
 */
@Controller("graphViewController")
@RequestMapping(value = "VIEW")
public class GraphViewController{

    private static final Logger logger = Logger.getLogger(GraphViewController.class);

    @ActionMapping(GraphUIConstants.SUBMIT_FORM)
    public void handleActionRequest(ActionRequest request, ActionResponse response)throws Exception {

            logger.info("action phase executed");

            response.setRenderParameter("par1", "par1");

    }

    @RenderMapping
    public ModelAndView handleRenderRequest(RenderRequest request, RenderResponse response, ModelMap model) {

      logger.info("render phase executed");  

      logger.info(request.getAttribute("par1"));

    }

}

Result of my log:

17:43:06,196 INFO  [GraphViewController:56] render phase executed
17:43:06,205 INFO  [GraphViewController:58] null
17:43:09,491 INFO  [GraphViewController:40] action phase executed
17:43:09,498 INFO  [GraphViewController:56] render phase executed
17:43:09,499 INFO  [GraphViewController:58] null

portlet.xml

    <?xml version='1.0' encoding='UTF-8' ?>
<portlet-app
    xmlns='http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd'
    xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
    xsi:schemaLocation='http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd'
    version='2.0'>

    <portlet>
        <portlet-name>GraphUI</portlet-name>
        <portlet-class>org.springframework.web.portlet.DispatcherPortlet</portlet-class>
        <init-param>
            <name>contextConfigLocation</name>
            <value>/WEB-INF/GraphUI-portlet.xml</value>
        </init-param>
        <supports>
            <mime-type>text/html</mime-type>
            <portlet-mode>VIEW</portlet-mode>
            <portlet-mode>EDIT</portlet-mode>
        </supports>
        <supported-locale>en</supported-locale>
        <resource-bundle>content.graph</resource-bundle>
    </portlet>


</portlet-app>

Solution

  • You quote correctly

    ...retrieve the same using RenderRequest.getParameter()

    and then you use

    request.getAttribute("par1")
    

    Just follow the tutorial and use getParameter() to get your value