Definindo SearchContainer no portlet para usá-lo no JSP usando EL e JSTL

Estou tentando usarSearchContainer na minha aplicação liferay. Atualmente eu tenho que usar Scrapplets JSP para definir oresultados em<liferay-ui:search-container-results> Tag. Este é o trecho até agora:

<liferay-ui:search-container emptyResultsMessage="there-are-no-courses" delta="5">
    <liferay-ui:search-container-results>
        <%
            List<Course> tempResults = ActionUtil.getCourses(renderRequest);

            results = ListUtil.subList(tempResults, 
                                   searchContainer.getStart(), 
                                   searchContainer.getEnd());

            total = tempResults.size();
            pageContext.setAttribute("results", results);
            pageContext.setAttribute("total", total);
        %>
    </liferay-ui:search-container-results>

    <liferay-ui:search-container-row ...></liferay-ui:search-container-row>

    <liferay-ui:search-iterator />

</liferay-ui:search-container>

Agora, eu gostaria de mudar esses scriplets para EL. Euencontrou um post sobre o mesmo problema, mas que está usandoSpring MVC. E não tenho idéia de onde escrever a linha abaixo, conforme fornecido na resposta a essa pergunta, nos portlets:

SearchContainer<Book> searchContainer = new SearchContainer<Book>(renderRequest, renderResponse.createRenderURL(), null, "there are no books");

Em não posso escrevê-lo na minha ação de portlet, como o parâmetro na minha ação éActionRequest eActionResponse, que não define o métodocreateRenderURL(). Como eu conseguiria oPortletURL?

Onde devo escrever a declaração acima? Atualmente estou escrevendo na mesma ação de onde estou retornando para esta página. Eu estou fazendo a coisa certa? Aqui está a ação que estou disparando da mesma página, como osearch-container é em:

public void addCourse(ActionRequest request, ActionResponse response) 
        throws Exception {

    ThemeDisplay themeDisplay = 
            (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);

    Course course = ActionUtil.courseFromRequest(request);

    List<String> errors = new ArrayList<String>();

    if (CourseRegValidator.validateCourse(course, errors)) {
        CourseLocalServiceUtil.addCourse(course, themeDisplay.getUserId());
        SessionMessages.add(request, "course-added-successfully");

        // I thought I might put it here.
        // But I don't know what to pass as `PortletURL` in constructor of SearchContainer
    } else {
        SessionErrors.add(request, "fields-required");
    }
}

Eu quero isso, toda vez que umCourse é adicionado, ele é renderizado no meu contêiner de pesquisa, na mesma página de onde estou disparandoaddCourse açao.

E sim, meu portlet se estendeMVCPortlet.

ATUALIZAR:

Ok, eu descobri uma parte.

Pela primeira vez quando o portlet é carregado, posso ignorardoView método no meu portlet e, em seguida, adicione oSearchContainer emrenderRequest lá, como eu tenho acesso a ele emdoView.Mas novamente, quando eu vou paraeditCourse() ação, onde estou fazendo umresponse.setRenderParameter(), para enviá-lo para outra página jsp. E nessa página JSP, eu estou disparando umupdateCourse() açao.Agora, deupdateCourse() ação, estou novamente usandoresponse.setRenderParameter() para enviá-lo para a página JSP original, onde estou usandoContêiner de pesquisa. Mas agora, já que não está passandodoView() método, eu não posso criar oSearchContainer e adicione-o ao pedido.

Então, há algum trabalho por aqui? Como se certificar de que o atributo definido emrenderRequest emdoView método está disponível emupdateCourse método? Eu sei que isso não parece prático, já que é completamente um novo pedido, mas existe alguma outra maneira?

Uma solução que posso imaginar é definir o atributo em um escopo maior, comosession oucontext ao invés derenderRequest. Mas não precisarei desse atributo em nenhum outro lugar. Então, não acho que seria apropriado.

Alguma entrada?

Atualização 2:

Apenas agora eu usei:

actionResponse.setPortletMode(PortletMode.VIEW);

no lugar de:

actionResponse.setRenderParameter("jspPage", jspPage);

E funcionou, como agora passadoView() método. Só queria perguntar, este é o caminho apropriado? Qual é a diferença entre dois métodos quando estamos definindo o parâmetro de renderização para a mesma página JSP, ondedoView métodos redireciona?

Minha correntedoView método se parece com:

@Override
public void doView(RenderRequest renderRequest, RenderResponse renderResponse) 
        throws IOException, PortletException {

    SearchContainer<Course> searchContainer = 
            new SearchContainer<Course>(renderRequest, renderResponse.createRenderURL(), null, "there-are-no-courses");

    searchContainer.setDelta(5);
    List<Course> tempResults = ActionUtil.getCourses(renderRequest);

    List<Course> results = ListUtil.subList(tempResults, 
                                    searchContainer.getStart(), 
                                    searchContainer.getEnd());

    searchContainer.setTotal(tempResults.size());
    searchContainer.setResults(results);

    renderRequest.setAttribute("searchContainer", searchContainer);
    super.doView(renderRequest, renderResponse);
}

questionAnswers(1)

yourAnswerToTheQuestion