Добавьте дополнительное поведение ко всем портлетам на портале Websphere.

Мне нужно добавить какое-то поведение ко всем моим портлетам.
Это должен быть какой-то ajax-запрос, который проверяет какое-то условие и, если оно истинно, показывает сообщение.
Сначала я решил добавить немного html в свой скин портала для мои приложения. В этом html я добавляю js-скрипт для выполнения ajax-запроса. Но я не знаю контекста для отправки запроса, потому что мы используем WSRP для доступа к нашим портлетам. Вот почему я не могу получить контекст WSRP и сделать запрос.
Второй мыслью было добавить общий jsp во все портлеты, и в этом jsp сделать логику (из jsp я могу получить контекст). Но будет нехорошо, если я изменю jsp во всех портлетах (используя тег "include").
Итак, мои вопросы следующие:

  1. Как добавить поведение ко всем портлетам?
  2. Как получить контекст WSRP в JS?
  3. Как добавить jsp во все портлеты, не меняя jsp портлетов?

P.S. Да и тему портала я никак не могу затронуть.


person zildarius    schedule 15.01.2015    source источник
comment
Я никогда не пробовал использовать WSRP, но у меня есть общее представление о том, что это такое. Что вы имеете в виду в контексте WSRP? Как насчет темы портала? Это не вариант?   -  person Georgy Gobozov    schedule 16.01.2015


Ответы (1)


Вы должны иметь возможность использовать файл глобальный фильтр портлетов для этого в WebSphere Portal. Вы создаете модуль WAR с классом фильтра и развертываете его на сервере приложений, на котором работает WPS. Он должен иметь файл с именем plugin.xml в WEB-INF, который описывает ваши глобальные фильтры через механизмы точки подключения eclipse в Portal. Ваш класс должен реализовать любой из подтипов javax.portlet.filter.PortletFilter стандартные интерфейсы, что означает, что код, который вы пишете, основан на стандартах.

Если вы реализуете глобальный фильтр портлетов, вы должны понимать, что он будет вызываться для каждого портлета, вызываемого на портале, включая административные. Чтобы избежать запуска предполагаемой логики там, где вы этого не хотите, проверяйте контекстный путь каждого запроса.

Из Центра знаний WPS статья:

Поскольку глобальные фильтры портлетов влияют на все портлеты, работающие в данном контейнере портлетов, модули консоли, содержащиеся в Integrated Solutions Console, также фильтруются. Важно протестировать реализацию фильтра на наличие нежелательных побочных эффектов в модулях консоли или портлетах. Один из подходов заключается в проверке контекстного пути запроса в логике фильтра.

Я не знаю контекстного пути портлета WSRP навскидку, но журнал SystemOut должен помочь вам определить, что это за значение, и указать правильное направление.

Наконец, есть статья с примером кода, описывающая метод портал вики.

person Scott Heaberlin    schedule 16.01.2015
comment
Спасибо за подробный ответ. - person zildarius; 16.01.2015
comment
Без проблем. Пожалуйста, не забудьте отметить как ответ, если это решило вашу проблему. - person Scott Heaberlin; 16.01.2015
comment
Я должен ответить. Действительно, работает. Я задавал вопрос пол года назад, но он нужен только сейчас. Так что - работает, как я хочу. Сделал фильтр, а так добавил дополнительную html-часть в начале страницы. @Override public void doFilter(RenderRequest request, RenderResponse response, FilterChain chain) throws IOException, PortletException { try{ String message = "<script type=\"text/javascript\">alert('Some message); </script>"; PrintWriter out = response.getWriter(); out.print(message ); }catch(Exception exc){ exc.printStackTrace(); }finally{ chain.doFilter(request, response); } - person zildarius; 03.08.2015
comment
У меня есть один небольшой дополнительный вопрос: могу ли я использовать jsp для вывода ответа в html в фильтре? - person zildarius; 03.08.2015