Портлет Liferay не вызывает правильный метод рендеринга (игнорирует setRenderParameter) - PullRequest
2 голосов
/ 11 августа 2010

У меня есть портлет, который имеет много методов рендеринга и действий:

@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 Ответ

1 голос
/ 15 октября 2010

Причина (кажется) состояла в том, что параметр action не был заменен, когда я приказал

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

Вместо замены значения, Spring добавил это значение для параметра actionследующим образом (псевдо):

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

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

На данный момент Spring, похоже, не знает, что делать, и вызывает метод рендеринга по умолчанию. Я работал с этим, используя другое имя параметра для параметра рендеринга ('render') .Таким образом, теперь действия вызываются параметром action, а средства визуализации - параметром render.

...