Портлет знает о других портлетах на той же странице

Мне поручено разработать «портлет действий», содержащий действия (например, h:commandLink) для всех других портлетов на той же странице. Теперь эти действия должны быть доступны только в том случае, если соответствующий портлет действительно присутствует на той же странице.

Может ли портлет «узнать», какие другие портлеты находятся на той же странице, без предварительной обработки ActionRequest?

Привет.


person Community    schedule 03.02.2015    source источник


Ответы (1)


Моя внутренняя реакция на ваш вопрос заключается в том, что портлет должен быть достаточно автономным, чтобы ему не требовались другие портлеты на странице для работы. Таким образом, без каких-либо других знаний о том, почему это необходимо сделать, похоже, что этот выбор дизайна имеет некоторые присущие недостатки. Портлет A никогда не должен обрабатывать ActionRequests для портлета B. Похоже, вы просто пытаетесь согнуть, сломать и злоупотребить спецификацией портлета, но я признаю, что нарушил правила проектирования, когда это оправдано вариантом использования.

В качестве альтернативы я мог бы предложить вместо этого, чтобы ваш портлет позволял другим портлетам сообщать вашему портлету, что им нужно сделать, вместо того, чтобы ваш портлет спрашивал. Вы можете сделать это на стороне клиента, когда каждый другой портлет запускает небольшой JavaScript при загрузке страницы, чтобы сообщить вашему портлету, что ему нужно делать.

Вернемся к вашему актуальному вопросу. Я не слишком углублялся в документацию, но WebSphere Portal предоставляет API, который может помочь определить, что вам нужно. Ниже приведена ссылка на документацию IBM по этому вопросу.

http://www-01.ibm.com/support/knowledgecenter/SSHRKX_8.5.0/mp/dev/dgn_modelovw.dita

SPI модели — это то, как портлет может получить доступ ко всему, что касается структуры страниц портала, состояния навигации и ряда других связанных вещей. Я ожидаю, что Model SPI сможет сообщить вам, какие другие портлеты находятся на той же странице, что и ваш текущий портлет. Как только вы получите список других портлетов на странице, вам решать, как определить, какие еще ссылки вам нужно отобразить.

person Nick Roth    schedule 04.02.2015
comment
Спасибо за ответ. Я уже кое-что понял, используя RenderFilter и IBM API, согласно этому сообщению: wpcertification.blogspot.de/2010/05/ Я знаю, что это, вероятно, нарушает стандарты, но мне сказали сделать это, поэтому я должен хотя бы придумать далеко. - person ; 05.02.2015