Configurando SearchContainer en el portlet para usarlo en JSP usando EL y JSTL

Estoy tratando de usarSearchContainer en mi aplicacion de vida Actualmente tengo que usar Scriplets JSP para establecer elresultados en<liferay-ui:search-container-results> etiquetas Este es el fragmento hasta ahora:

<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>

Ahora, me gustaría cambiar esos scriplets a EL. yoEncontré una publicación sobre el mismo tema, pero eso es usarSpring MVC. Y no tengo idea de dónde escribir la siguiente línea como se indica en la respuesta a esa pregunta, en los portlets:

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

No puedo escribirlo en mi acción de portlet, ya que el parámetro en mi acción esActionRequest yActionResponse, que no define el métodocreateRenderURL(). ¿Cómo obtendría elPortletURL?

¿Dónde debo escribir la declaración anterior? Actualmente estoy escribiendo en la misma acción desde donde regreso a esta página. ¿Lo estoy haciendo bien? Aquí está la acción que estoy disparando desde la misma página, como lasearch-container es en:

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");
    }
}

Quiero eso, cada vez que unCourse se agrega, se representa en mi contenedor de búsqueda, en la misma página desde donde estoy disparando eladdCourse acción.

Y sí, mi portlet se extiende.MVCPortlet.

ACTUALIZAR:

Ok, me di cuenta de algunas partes.

Por primera vez, cuando se carga el portlet, puedo anular eldoView método en mi portlet, y luego agregar elSearchContainer enrenderRequest allí, como he accedido a ella endoView.Pero de nuevo, cuando voy aeditCourse() acción, donde estoy haciendo unaresponse.setRenderParameter(), para enviarlo a otra página jsp. Y en esa página JSP, estoy disparando unupdateCourse() acción.Ahora desdeupdateCourse() acción, estoy usando otra vezresponse.setRenderParameter() para enviarlo a la página JSP original, donde estoy usandoContenedor de búsqueda. Pero ahora, ya que no está pasando pordoView() método, no puedo crear elSearchContainer y agregarlo a la solicitud.

Entonces, ¿hay alguna solución alternativa aquí? Cómo asegurarse de que el atributo que establezco enrenderRequest endoView método está disponible enupdateCourse ¿método? Sé que no suena práctico, ya que es una solicitud completamente nueva, pero ¿hay alguna otra forma?

Una solución alternativa que se me ocurre es establecer el atributo en un ámbito más amplio, comosession ocontext en lugar derenderRequest. Pero, no necesitaré ese atributo en ningún otro lugar. Entonces, no creo que eso sea apropiado.

¿Alguna entrada?

Actualización 2:

Justo ahora, utilicé:

actionResponse.setPortletMode(PortletMode.VIEW);

en lugar de:

actionResponse.setRenderParameter("jspPage", jspPage);

Y funcionó, como pasa ahora.doView() método. Sólo quería preguntar, ¿es esta la forma adecuada? ¿Cuál es la diferencia entre los dos métodos cuando configuramos el parámetro de renderización en la misma página JSP, dondedoView métodos redireccionamientos?

Mi actualdoView método se ve como

@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);
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta