Почему запрос сервлета недоступен в API портлета

Деос API портлета не содержит никаких ссылок на вложенные объекты запроса и ответа сервлета. Я знаю, что это не предпочтительная модель взаимодействия с пользователем, но кажется драконовским запрет на любой доступ.

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

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

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

Однако я чувствую вину.

Итак, мой вопрос на самом деле заключается в том, есть ли основная глубокая причина для запрета, или это просто для того, чтобы обеспечить соблюдение взглядов авторов на среду API?


person John Smith    schedule 13.05.2010    source источник


Ответы (1)


Портлет запускается не прямо в контейнер сервлетов, а в то, что называется контейнером портлетов.

Вы должны иметь доступ к соответствующей информации, PortletRequest, PortletResponse и PortletContext.

Причина в том, что два экземпляра одного и того же портлета могут работать рядом друг с другом на одной странице, но при этом быть изолированными со своим собственным жизненным циклом. Портал "мультиплексирует" это прозрачно для вас и преобразует мир сервлетов в мир портлетов. Мосты портлетов также доступны для разработки портлетов с использованием технологий, отличных от портлетов (например, JSF). Я согласен, что все это обычно (очень) сложно использовать (из-за множества доступных фреймворков и реализаций), но если подумать о том, как это работает концептуально, это довольно неплохо.

Точные данные будут зависеть от технологий, которые вы выбрали для разработки портлета. Но я чувствую, что должен быть способ делать то, что вы хотите, используя API портлета.

person ewernli    schedule 13.05.2010
comment
Да, похоже, что спецификация портлета предназначена для тяжелой реализации, без вариантов для облегченной. У нас есть несколько портлетов, которые делают разные вещи и живут так, как должны портлеты. Однако большинство из них являются только отображением, и большинство из них представляют собой представление общей модели, определяемой параметрами запроса страницы. - person John Smith; 13.05.2010
comment
Возможно, вы можете упаковать свою модель на уровне сервиса, который вы развертываете в загрузчике общего класса. Таким образом, все экземпляры портлетов используют одни и те же классы для модели, и вы можете обеспечить кэширование и т. д. Просто идея. - person ewernli; 14.05.2010