Я использую Liferay и Spring MVC, и я хочу, чтобы перенаправить на другой портлет и передать ему параметр, но когда я пытаюсь установить параметры отображения Я получаю эту ошибку:Перенаправление на другой портлет с ActionMapping
15:20:24,859 ERROR [portal-web.docroot.html.portal.render_portlet_jsp] (http-foo-10.23.243.3-8080-7) java.lang.IllegalStateException: Set render parameter has already been called
at com.liferay.portlet.ActionResponseImpl.sendRedirect(ActionResponseImpl.java:48) at sk.foo.showcasePortlet.ShowcaseController.redirect(ShowcaseController.java:65)
метод в showcaseController, которая решается содержит только и присваивание редиректа:
@ActionMapping(params = { "action=redirect" })
public void redirect(ActionRequest request, ActionResponse response)
throws IOException {
response.setRenderParameter("path", request.getParameter("path"));
response.sendRedirect("/path/to/portlet");
}
Почему я не могу назначить этот параметр? Когда я удалить строку перенаправление работает, но проблема в том, что портлет, который пользователь перенаправляется ожидает строку параметра «путь»:
@RenderMapping
public String barBaz(RenderRequest request, @RequestParam String path){
// ...
return "some/jsp";
}
Как я могу передать параметр методу barBaz
в другой портлет, пожалуйста?
что, если я прохожу его с response.setProperty («путь», «somePath»), другой портлет сможет получить его с request.getProperty («путь»)? (если это не @RequestParam) – Dropout
Нет, вы не можете сделать это хорошо. Фактически свойства могут использоваться портлетами для предоставления конкретной информации о поставщике на портале. Они различаются для поставщиков серверов портала. Простой способ использования сеанса. request.getSession(). на объекте сеанса вы можете установить атрибуты. session.setAttribute ("portletscopeattribute", "portletscopevalue", PortletSession.PORTLET_SCOPE); Также вы можете использовать события. –
Тогда я буду использовать сеанс. Большое спасибо! – Dropout