portlet:actionURL

PortletActionURL is a UIComponent that provides the ability to get a PortletURL that invokes the ACTION_PHASE of the portlet lifecycle targeting the current portlet.

General Usage

Specify portlet:param as a child tag in order to add portlet action parameters to the URL. The portlet:actionURL component tag is provided for the sake of completeness since it has little purpose in JSF portlets. As shown in the example below, a practical use-case might be to @Override GenericFacesPortlet in order to intercept a non-JSF postback.

Source Code

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:portlet="http://xmlns.jcp.org/portlet_3_0"
	xmlns:ui="http://xmlns.jcp.org/jsf/facelets">

	<portlet:actionURL escapeXml="false" var="actionURL">
		<portlet:param name="foo" value="1234" />
		<portlet:param name="Non-Faces-Postback" value="true" />
	</portlet:actionURL>
	<form action="#{actionURL}" method="post">
		<input type="submit" value="#{i18n['submit-non-faces-postback']}" />
	</form>

</ui:composition>
public class ActionURLDemoPortlet extends GenericFacesPortlet {

	@Override
	public void processAction(ActionRequest actionRequest, ActionResponse actionResponse) throws PortletException,
		IOException {

		ActionParameters actionParameters = actionRequest.getActionParameters();

		String viewState = actionParameters.getValue(ResponseStateManager.VIEW_STATE_PARAM);

		String nonFacesPostback = actionParameters.getValue("Non-Faces-Postback");

		if ((viewState == null) && ("true".equalsIgnoreCase(nonFacesPostback))) {

			MutableRenderParameters mutableRenderParameters = actionResponse.getRenderParameters();

			mutableRenderParameters.setValue("Non-Faces-Postback", nonFacesPostback);

			String foo = actionParameters.getValue("foo");

			if (foo != null) {
				mutableRenderParameters.setValue("foo", foo);
			}
		}
		else {
			super.processAction(actionRequest, actionResponse);
		}
	}

	@Override
	protected void doView(RenderRequest renderRequest, RenderResponse renderResponse) throws PortletException,
		IOException {

		RenderParameters renderParameters = renderRequest.getRenderParameters();
		String nonFacesPostback = renderParameters.getValue("Non-Faces-Postback");

		if (nonFacesPostback == null) {
			super.doView(renderRequest, renderResponse);
		}
		else {
			PrintWriter writer = renderResponse.getWriter();
			writer.write("<p>");
			writer.write("Successfully executed ");
			writer.write("<strong>non-JSF postback</strong> in ");
			writer.write(ActionURLDemoPortlet.class.getName());
			writer.write("</p>");

			String foo = renderParameters.getValue("foo");
			writer.write("<p>");
			writer.write("Action Parameter:<pre>foo=" + foo + "</pre>");
			writer.write("</p>");

			PortletURL renderURL = renderResponse.createRenderURL();
			MutableRenderParameters mutableRenderParameters = renderURL.getRenderParameters();
			mutableRenderParameters.setValue("componentPrefix", "portlet");
			mutableRenderParameters.setValue("componentName", "actionurl");
			mutableRenderParameters.setValue("componentUseCase", "general");
			writer.write("<p>");
			writer.write("<a href=\"");
			writer.write(renderURL.toString());
			writer.write("\">");
			writer.write("Return to portlet:actionURL in the Liferay Faces Showcase");
			writer.write("</a>");
			writer.write("</p>");
		}
	}
}
Liferay Faces Bridge Implementation 5.0.0 + Showcase Common 3.1.1 + Liferay Faces Util 3.4.1 + Mojarra 2.2.20