Добавете допълнително поведение към всички портлети в Websphere Portal

Трябва да добавя някакво поведение към всички мои портлети.
Трябва да е някаква ajax заявка, която проверява някакво условие и ако е вярно - показва съобщение.
Първоначално реших да добавя малко html към кожата на моя портал за моите приложения. В този html добавям js-скрипт, за да направя ajax заявка. Но не знам контекста, за да изпратя заявка, защото използваме WSRP за достъп до нашите портлети. Ето защо не мога да получа WSRP контекст и да направя заявка.
Втората мисъл беше да добавя общ jsp във всички портлети и в тази jsp make логика (от 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 plug point в портала. Вашият клас трябва да имплементира някой от подтиповете на javax.portlet.filter.PortletFilter стандартни интерфейси, което означава, че кодът, който пишете, е базиран на стандарти.

Ако внедрите глобален филтър за портлети, трябва да разберете, че той ще бъде извикан за всеки портлет, извикан на портала - включително административни. За да избегнете изпълнението на желаната логика там, където не желаете, проверете контекстния път на всяка заявка.

От Центъра за знания на WPS статия:

Тъй като глобалните филтри за портлети засягат всички портлети, работещи в даден контейнер за портлети, конзолните модули, които се съдържат в конзолата за интегрирани решения, също се филтрират. Важно е да тествате внедряването на вашия филтър за нежелани странични ефекти върху конзолни модули или портлети. Един подход е да тествате чрез проверка на пътя на контекста на заявката в логиката на вашия филтър.

Не знам контекстния път на 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