代码之家  ›  专栏  ›  技术社区  ›  heikkim

Liferay Portlet未调用正确的呈现方法(忽略setrenderParameter)

  •  2
  • heikkim  · 技术社区  · 14 年前

    我有一个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");
        ...
      }
    

    在上面的代码中,方法 承兑车 设置应导致 展示信息 在呈现阶段调用。

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

    1 回复  |  直到 14 年前
        1
  •  1
  •   heikkim    14 年前

    原因似乎是 行动 -我命令时参数没有被替换

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

    Spring没有替换该值,而是将该值添加到动作参数中,如下所示(伪):

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

    此时,Spring似乎不知道该怎么做,并调用默认的渲染方法。 我使用了一个不同的参数名来处理渲染参数(“render”)。 . 因此,现在动作由“action”-参数调用,渲染器由“render”-参数调用。