Liferay相同的友好URL动作和渲染方法

时间:2014-06-05 07:23:51

标签: java liferay friendly-url

我想在liferay中为render和action方法定义相同的友好url。

Friendly-url.xml中的

<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>

区别仅在于p_p_lifecycle。

在jsp中是形式:

<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>

在控制器中我有两种方法:

@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)

在提交表格的时候,不调用行动方法。 但是当我改变行动方法的模式时,例如

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

一切正常

Liferay中的

不能有动作方法和渲染方法相同的模式吗?或者我在某处有错误?

1 个答案:

答案 0 :(得分:0)

portlet action render 是两个截然不同的生命周期。正如您所经历的那样,两者都不能有一个(相同的)URL。门户网站应该如何知道您只想渲染并执行操作。

使用友好的URL,您可以从模式映射到实际的URL - 因此模式必须是唯一的。