Настройка SearchContainer в портлете для использования его в JSP с использованием EL и JSTL

Я пытаюсь использоватьSearchContainer&nbsp;в моем приложении LifeRay. В настоящее время я должен использовать JSP Scriplets, чтобы установитьРезультаты&nbsp;в<liferay-ui:search-container-results>&nbsp;теги. Это фрагмент до сих пор:

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

Теперь я хотел бы изменить эти скрипты на EL. янашел один пост&nbsp;относительно той же проблемы, но это используетSpring MVC, И я не знаю, где написать строку ниже, как указано в ответе на этот вопрос в портлетах:

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

Я не могу написать это в моем действии портлета, так как параметр в моем действииActionRequest&nbsp;а такжеActionResponse, который не определяет методcreateRenderURL(), Как бы я получитьPortletURL?

Где я должен написать вышеупомянутое утверждение? В настоящее время я пишу в том же действии, откуда я возвращаюсь на эту страницу. Я делаю это правильно? Вот действие, которое я запускаю с той же страницы, что иsearch-container&nbsp;в:

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

Я хочу этого каждый раз, когдаCourse&nbsp;добавлен, он отображается в моем поисковом контейнере, на той же странице, откуда я запускаюaddCourse&nbsp;действие.

И да, мой портлет расширяетсяMVCPortlet.

ОБНОВИТЬ:

Хорошо, я понял несколько частей.

Впервые при загрузке портлета я могу переопределитьdoView&nbsp;метод в моем портлете, а затем добавьтеSearchContainer&nbsp;вrenderRequest&nbsp;там, как я имею доступ к нему вdoView.Но опять же, когда я иду наeditCourse()&nbsp;действие, где я делаюresponse.setRenderParameter(), чтобы отправить его на другую страницу JSP. И на этой странице JSP я стреляюupdateCourse()&nbsp;действие.Теперь изupdateCourse()&nbsp;действие, я снова используюresponse.setRenderParameter()&nbsp;чтобы отправить его на исходную страницу JSP, где я используюПоиск контейнера, Но сейчас, так как это не проходитdoView()&nbsp;метод, я не могу создатьSearchContainer&nbsp;и добавьте его в запрос.

Итак, есть ли здесь какой-нибудь обходной путь? Как убедиться, что атрибут, который я установил вrenderRequest&nbsp;вdoView&nbsp;метод доступен вupdateCourse&nbsp;метод? Я знаю, что это не звучит практично, так как это совершенно новый запрос, но есть ли другой способ?

Один из обходных путей, который я могу придумать, - установить атрибут в более широкой области, например:session&nbsp;или жеcontext&nbsp;вместоrenderRequest, Но мне этот атрибут нигде не понадобится. Так что я не думаю, что это будет уместно.

Любые входы?

Обновление 2:

Только сейчас я использовал:

actionResponse.setPortletMode(PortletMode.VIEW);

на месте:

actionResponse.setRenderParameter("jspPage", jspPage);

И это сработало, как сейчас проходитdoView()&nbsp;метод. Просто хотел спросить, это правильный путь? В чем разница между двумя методами, когда мы устанавливаем параметр рендеринга для одной и той же страницы JSP, гдеdoView&nbsp;методы перенаправляют?

Мой нынешнийdoView&nbsp;Метод выглядит так:

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