0

I would like to define same friendly url for render and action method in liferay.

in Friendly-url.xml is

<route>
    <pattern>/create/{parent}</pattern>
    <generated-parameter name="parent">{parent}</generated-parameter>
    <implicit-parameter name="p_p_lifecycle">0</implicit-parameter>
    <implicit-parameter name="p_p_state">normal</implicit-parameter>
    <implicit-parameter name="p_p_mode">view</implicit-parameter>
    <implicit-parameter name="action">create</implicit-parameter>
</route>

<route>
    <pattern>/create/{parent}</pattern>
    <generated-parameter name="parent">{parent}</generated-parameter>
    <implicit-parameter name="p_p_lifecycle">1</implicit-parameter>
    <implicit-parameter name="p_p_state">normal</implicit-parameter>
    <implicit-parameter name="p_p_mode">view</implicit-parameter>
    <implicit-parameter name="action">create</implicit-parameter>
</route>

Difference is only in p_p_lifecycle.

In jsp is form:

<liferay-portlet:actionURL var="saveUrl">
    <liferay-portlet:param name="action" value="create" />
    <liferay-portlet:param name="parent" value="${parent}" />
</liferay-portlet:actionURL>

<form:form method="post" action="${saveUrl}" commandName="thesaurus" enctype="multipart/form-data">
...
</form>

and in controller I have 2 methods:

@RenderMapping(params = { "action=create" })
public String create(RenderRequest request, RenderResponse response, Model model, @RequestParam String parent)

@ActionMapping(params = { "action=create" })
public void create(ActionRequest request, ActionResponse response, @RequestParam String parent, @Valid Thesaurus thesaurus, BindingResult result)

When I submit form, action method is not called. But when I change pattern for action method, e.g

<pattern>/createX/{parent}</pattern>

everything works

in Liferay can not have action method and render method same pattern? Or I have bug somewhere?

karci10
  • 375
  • 3
  • 15

1 Answers1

0

portlet action and render are two distinct and different lifecycles. You can't have one (same) URL for both, as you correctly experience. How should the portal know that you only want to render vs. execute an action.

With the friendly URLs you map from pattern to the actual URL - thus pattern must be unique.

Olaf Kock
  • 46,930
  • 8
  • 59
  • 90