将@RequestParam从@ActionMapping传递到@RenderMapping

时间:2013-01-16 09:43:04

标签: java spring spring-mvc portlet

我在Liferay上使用Spring MVC portlet,我正在寻找一种方法将RequestParam从ActionRequest传递给RenderRequest。 这是我的2功能的签名。

    @ActionMapping(params="action=bookmark_fiche")
    public void bookmarkFicheRef(@RequestParam long ficheId, ActionRequest request, ActionResponse response){

        ...
        response.setRenderParameter("action", "view_fiche");
    }

    @RenderMapping (params="action=view_fiche")
    public String showFiche(@RequestParam long ficheId, ModelMap model, RenderRequest request, RenderResponse response){
        ...
    }

使用

时,渲染函数showFiche被其他链接使用并正常工作
<portlet:renderURL var="rowURL" >
    <portlet:param name="action" value="view_fiche" />
    <portlet:param name="ficheId" value="${fiche.ficheId}" />
</portlet:renderURL>

但如果我使用

<portlet:actionURL var="boookmarkFicheRefURL">
    <portlet:param name="action" value="bookmark_fiche" />
    <portlet:param name="ficheId" value="${SEARCH_CONTAINER_RESULT_ROW.object.ficheId}" />
</portlet:actionURL>

行动阶段成功但渲染阶段失败并出现错误:

09:24:39,132 ERROR [http-bio-8080-exec-5][render_portlet_jsp:154] org.springframework.web.portlet.bind.MissingPortletRequestParameterException: Required long parameter 'ficheId' is not present

response.setAttribute("ficheId", Long.toString(ficheId));也不起作用......

是否存在传输param而不修改render方法的方法? 谢谢

1 个答案:

答案 0 :(得分:3)

我不明白这是否是您想要的,但是如果您想从action方法中调用render方法,并且:

response.setRenderParameter("action", "view_fiche");
你正确添加的

(设置渲染参数“action”),你应该添加ficheId参数

response.setRenderParameter("ficheId", Long.toString(ficheId));

也是渲染方法所期望的。