我正在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));
也不起作用...是否存在一种无需修改render方法即可传递参数的方法?
谢谢
最佳答案
我不知道这是否是您想要的,但是否要从action方法调用render方法,以及:
response.setRenderParameter("action", "view_fiche");
您已正确添加(设置了渲染参数“action”),则应添加ficheId参数
response.setRenderParameter("ficheId", Long.toString(ficheId));
也是render方法所期望的。