2010-08-11 2 views
2

Я портлет, который имеет много рендеринга и действий методы:Liferay портлета не называет правильный метод (игнорирует setRenderParameter) оказывать

@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

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

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

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

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

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

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

Смежные вопросы