2013-07-04 2 views
0

У меня есть портлет uPortal JSR-268 Spring MVC с приветственной страницей. Все ссылки на целевой странице отображают следующую страницу в максимизированном режиме, и это относится ко всем внутренним ссылкам.Страница приветствия портлета может отображаться в обычном WindowState, другие страницы должны отображаться только в максимальном WindowState

Что я хочу сделать, это отобразить страницу приветствия, если пользователь находится на любой другой странице, и автоматически меняет WindowState. Это относится только к RenderRequests, меня здесь не интересует какой-либо другой тип запроса.

Пользователи могут изменять WindowState через интерфейс пользователя, используя ссылку «вернуться к панели мониторинга», нажав на кнопки окна на портале или, если они знают, что они делают, манипулируя URL-адресом.

Я могу определить запросы на страницу приветствия, изучив параметры запроса.

Я попытался

  • перехватчик, но все, что я, кажется, чтобы быть в состоянии сделать здесь вернуться ложным, что приводит не содержание, оказываемые в портлет. Это неприемлемо.
  • ошибка, возникающая из-за перехватчика. Это небольшое улучшение, так как я могу показать страницу пользовательских ошибок, но она по-прежнему не позволяет мне отображать страницу приветствия.

Также было бы целесообразно перенаправить на первоначально запрошенную страницу с помощью WindowState, чтобы вернуться к максимальному. Кажется, что портлеты не поддерживают перенаправление.

Если бы я имел дело с ActionRequests, я мог бы установить RenderParameter на ActionResponse от перехватчика, который заставил бы страницу приветствия быть визуализированной. Однако для RenderRequests не существует эквивалента. Я что-то упускаю?

ответ

0

Вместо этого я использовал javax.portlet.filter.RenderFilter. Подпись метода выглядит так:

public void doFilter(RenderRequest request, RenderResponse response, 
    FilterChain chain) throws IOException, PortletException 

Это дает мне доступ к рендерингу для начала. Следующая проблема заключается в том, что вы не можете устанавливать параметры в RenderRequest.

Я решил это, расширив RenderRequest и переопределив getParameter, чтобы он вернул правильный параметр для маршрутизации запроса на правильный контроллер. Это позволило мне вызвать следующую ссылку в цепочке с завернутым запросом.

Немного грязный, но он работает как минимум.