Ustawienie SearchContainer w portlecie na użycie go w JSP przy użyciu EL i JSTL

Próbuję użyćSearchContainer w mojej aplikacji ratunkowej. Obecnie używam JSP Scriplets do ustawieniawyniki w<liferay-ui:search-container-results> tagi. To jest jak dotąd urywek:

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

Chciałbym teraz zmienić te scriplety na EL. jaznalazłem jeden post w odniesieniu do tego samego problemu, ale używaSpring MVC. I nie mam pojęcia, gdzie napisać poniższą linię podaną w odpowiedzi na to pytanie, w portletach:

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

In nie może zapisać go w mojej akcji portletu, ponieważ parametr w mojej akcji toActionRequest iActionResponse, który nie definiuje metodycreateRenderURL(). Jak dostanęPortletURL?

Gdzie powinienem napisać powyższe stwierdzenie? Obecnie piszę w tej samej akcji, z której wracam na tę stronę. Czy robię to dobrze? Oto akcja, którą strzelam z tej samej strony, cosearch-container jest w:

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

Chcę tego za każdym razem aCourse jest dodawany, jest renderowany w moim kontenerze wyszukiwania, na tej samej stronie, z której wypalamaddCourse akcja.

I tak, mój portlet się rozszerzaMVCPortlet.

AKTUALIZACJA:

Ok, wymyśliłem kilka części.

Po raz pierwszy po załadowaniu portletu mogę przesłonićdoView metoda w moim portlecie, a następnie dodajSearchContainer wrenderRequest tam, jak mam do niego dostępdoView.Ale znowu, kiedy idę dalejeditCourse() akcja, gdzie robięresponse.setRenderParameter(), aby wysłać go na inną stronę jsp. I na tej stronie JSP strzelamupdateCourse() akcja.Teraz zupdateCourse() działania, znowu używamresponse.setRenderParameter() aby wysłać go na oryginalną stronę JSP, gdzie używamWyszukaj kontener. Ale teraz, ponieważ nie przechodzidoView() metoda, nie mogę utworzyćSearchContainer i dodaj go na żądanie.

Czy jest tu jakieś rozwiązanie? Jak upewnić się, że atrybut, który ustawiłemrenderRequest wdoView metoda jest dostępna wupdateCourse metoda? Wiem, że to nie brzmi praktycznie, ponieważ jest to całkowicie nowa prośba, ale czy jest jakiś inny sposób?

Jednym z obejść, o którym myślę, jest ustawienie atrybutu w większym zakresie, na przykładsession lubcontext zamiastrenderRequest. Ale nie potrzebuję tego atrybutu nigdzie indziej. Więc nie sądzę, że byłoby to właściwe.

Jakieś dane wejściowe?

Aktualizacja 2:

Właśnie teraz użyłem:

actionResponse.setPortletMode(PortletMode.VIEW);

zamiast:

actionResponse.setRenderParameter("jspPage", jspPage);

I zadziałało, jak terazdoView() metoda. Chciałem tylko zapytać, czy to właściwy sposób? Jaka jest różnica między dwiema metodami, gdy ustawiamy parametr renderowania na tę samą stronę JSP, gdziedoView metody przekierowań?

Mój obecnydoView metoda wygląda następująco:

@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