Liferay portlet没有调用正确的渲染方法(忽略setRenderParameter)

时间:2010-08-11 12:11:28

标签: spring-mvc liferay portlet

我有一个portlet,它有很多渲染和操作方法:

@Controller
@RequestMapping("VIEW")
public class CartController {
  @RenderMapping() // default render method
  public String defaultRender(RenderRequest req, RenderResponse res, Model model) throws PortalException, SystemException {
    ...
  }

  @RenderMapping(params="action=showCustInfo")
  public String showCustInfo(RenderRequest req, RenderResponse res, Model model) throws PortalException, SystemException {
    ...
  }

  @ActionMapping(params="action=acceptCart")
public void acceptCart(ActionRequest req, ActionResponse res, Model model) throws PortalException, SystemException {
    ...
    res.setRenderParameter("action", "showCustInfo");
    ...
  }

在上面的代码中,方法 acceptCart 设置一个渲染参数,该参数应该导致在渲染阶段调用 showCustInfo

问题是每次都会调用默认的渲染方法。我错过了什么?

1 个答案:

答案 0 :(得分:1)

原因(似乎)是行动 - 参数在我命令时未被替换

res.setRenderParameter("action", "showCustInfo");

不是替换值,而是为action参数添加了这个值,如下所示(伪):

// Before:
params['action'] = ['acceptCart'] // all req params in Spring are handled as String arrays..

// After:
params['action'] = ['acceptCart','showCustInfo']

此时,Spring似乎不知道该怎么做并调用默认的render方法。 我通过为渲染参数('render')使用不同的参数名来解决这个问题。因此,现在动作由'action'参数和渲染器'render'-parameter调用。