Программирование порталов / портлетов - связывание портлетов / поток страниц
Я пишу свое первое приложение на основе портлетов (для liferay, но решение должно быть независимым от контейнера), и мне интересно, как люди решают предоставлять ссылки пользователю, которые "ведут" на разные портлеты (возможно, на разные "страницы" в портале).
Хотя вы можете легко иметь различные режимы просмотра внутри своего портлета, как вы можете связать с другим портлетом и (возможно) также передать параметры вместе?
Я не говорю о простой связи между портлетами, меня интересует реальный поток страниц.
Пример: у вас есть страница A с портлетом, который отображает список новостей. Затем у вас есть страница B, которая настроена таким образом, что я хотел бы показать один элемент новостей (например, различные портлеты вокруг него)
Есть ли общее решение для ссылки на страницу B и сказать новостному подробному портлету, что он должен показывать элемент XYZ?
Быстрое и грязное решение - настроить целевую ссылку в режиме редактирования портлета news-list-port. Но это имеет ряд недостатков: - сложные портлеты могут иметь несколько целевых URL-адресов, что приводит к огромным усилиям по настройке администратора портала - URL-адреса могут не следовать схеме, которая допускает простое внедрение параметров
Я имею в виду решение, но это потребует огромных усилий и, возможно, изменений в целевых портлетах, что не всегда возможно, если вы используете сторонние портлеты.
Мое решение будет выглядеть так: (черновик!)
Портлеты регистрируются в центральной службе со своими идентификаторами портлетов, и когда портлет хочет соединиться с портлетом, он может выполнить поиск на основе символического имени. Это облегчит работу администратора, поскольку возможно "автоматическое обнаружение" портлетов. Служба также может предоставлять пользовательский интерфейс для связи портлетов на основе исходного и целевого портлетов.
Генерация URL для портлетов, которые могут быть изменениями, может быть решена посредством вызова службы портлету, который генерирует URL в целом с введенными параметрами и возвращает его. Для портлетов, которые вы не можете изменить, вы должны добавить параметры и надеяться, что это работает.:-/
Какие-либо предложения? Есть ли более простые решения? существующие решения?
Спасибо!
Патрик
2 ответа
Насколько я знаю, спецификация портлета не покрывает это. Так что нет портативного решения. Для Liferay вы всегда можете использовать их собственную библиотеку тегов, которая предназначена именно для этой проблемы. Есть аналогичный механизм для Websphere Portal.
Что-то можно найти здесь и здесь
Как правило, я бы попытался избежать этого и использовать стандартный механизм IPC (Public Render Parameters или Events)
Для спецификации JSR 286 можно использовать события для связи между портлетами. Для более старого JSR 168 не существует одобренного способа сделать это. Если вы найдете способ, который работает для вас, то используйте его.
Есть старая книга, бесплатно выданная Мэннингу (требуется регистрация). Вы можете найти некоторые идеи там.