Настройка SearchContainer в портлете для использования его в JSP с использованием EL и JSTL
Я пытаюсь использоватьSearchContainer
в моем приложении LifeRay. В настоящее время я 'использовать JSP Scriplets для установкиРезультаты в теги. Это фрагмент до сих пор:
Теперь я хотел бы изменить эти скрипты на EL. янашел один пост относительно той же проблемы, но это используетSpring MVC
, И я'Мы не знаем, где написать строку ниже, как указано в ответе на этот вопрос в портлетах:
SearchContainer searchContainer = new SearchContainer(renderRequest, renderResponse.createRenderURL(), null, "there are no books");
В банкезаписать его в действие моего портлета, так как параметр в моем действииActionRequest
а такжеActionResponse
, который не определяет методcreateRenderURL()
, Как бы я получить?PortletURL
Где я должен написать вышеупомянутое утверждение? В настоящее время я 'я пишу в том же действии, откуда ям возвращаюсь на эту страницу. Я делаю это правильно? Вот'это действие, которое ястрельба с той же страницы, что иsearch-container
в:
public void addCourse(ActionRequest request, ActionResponse response)
throws Exception {
ThemeDisplay themeDisplay =
(ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
Course course = ActionUtil.courseFromRequest(request);
List errors = new ArrayList();
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
добавлен, он отображается в моем поисковом контейнере, на той же странице, откуда ястреляюaddCourse
действие.
И да, мой портлет расширяется.MVCPortlet
ОБНОВИТЬ:
Хорошо, я понял несколько частей.
Впервые при загрузке портлета я могу переопределитьdoView
метод в моем портлете, а затем добавьтеSearchContainer
вrenderRequest
там, как ядоступ к нему в.doView
Но опять же, когда я иду наeditCourse()
действие, где яя делаюresponse.setRenderParameter()
, чтобы отправить его на другую страницу JSP. И на этой странице JSP яЯ стреляюupdateCourse()
действие.Теперь изupdateCourse()
действие, ям снова с помощьюresponse.setRenderParameter()
чтобы отправить его на исходную страницу JSP, где ям используюПоиск контейнера, Но сейчас, так как это не проходитdoView()
метод, я могут создатьSearchContainer
и добавьте его в запрос.Итак, есть ли здесь какой-нибудь обходной путь? Как убедиться, что атрибут, который я установил вrenderRequest
вdoView
метод доступен вupdateCourse
метод? Я знаю, что неЭто звучит практично, так как это совершенно новый запрос, но есть ли другой способ?
Один из обходных путей, который я могу придумать, - установить атрибут в более широкой области, например:session
или жеcontext
вместоrenderRequest
, Но я выигралЭтот атрибут нигде не нужен. Итак, я неНе думаю, что это будет уместно.
Любые входы?
Обновление 2:
Только сейчас я использовал:
actionResponse.setPortletMode(PortletMode.VIEW);
на месте:
actionResponse.setRenderParameter("jspPage", jspPage);
И это сработало, как сейчас проходитdoView()
метод. Просто хотел спросить, это правильный путь? Какие'Разница между двумя методами, когда мы устанавливаем параметр рендеринга на одну и ту же страницу JSP, гдеdoView
методы перенаправляют?
Мой текущийdoView
Метод выглядит так:
@Override
public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {
SearchContainer searchContainer =
new SearchContainer(renderRequest, renderResponse.createRenderURL(), null, "there-are-no-courses");
searchContainer.setDelta(5);
List tempResults = ActionUtil.getCourses(renderRequest);
List results = ListUtil.subList(tempResults,
searchContainer.getStart(),
searchContainer.getEnd());
searchContainer.setTotal(tempResults.size());
searchContainer.setResults(results);
renderRequest.setAttribute("searchContainer", searchContainer);
super.doView(renderRequest, renderResponse);
}