Почему запрос сервлета недоступен в API портлета
API-интерфейсы портлета не предоставляют никаких ссылок на вложенные объекты запроса и ответа сервлета. Я знаю, что это не предпочтительная модель взаимодействия с пользователем, но кажется драконовским, чтобы удалить весь доступ.
Я понимаю, что для взаимодействия с пользователем на основе портлетов вы хотите использовать URL-адреса портлетов и позволить контейнеру портлетов управлять всей сложностью.
Однако, если у вас есть несколько портлетов, которые в основном отображают варианты одних и тех же данных, для них имеет смысл использовать вложенный запрос для обработки данных.
В итоге мы использовали специальный вызов Liferay для получения запроса, и все, кажется, работает так, как мы хотим.
Однако я чувствую вину.
Таким образом, мой вопрос на самом деле: есть ли глубокая причина запрета, или это просто для того, чтобы обеспечить авторский взгляд на среду API?
1 ответ
Портлет работает не прямо в контейнере сервлетов, а в том, что называется контейнером портлетов.
Вы должны иметь доступ к соответствующей информации, PortletRequest
, PortletResponse
, а также PortletContext
,
Причина в том, что два экземпляра одного и того же портлета могут работать рядом друг с другом на одной и той же странице, но при этом быть изолированными в своем жизненном цикле. Портал будет "мультиплексировать" это прозрачно для вас, и он будет конвертировать из мира сервлетов в мир портлетов. Также доступны мосты портлетов для разработки портлетов с использованием технологий, не связанных с портлетами (например, JSF). Я согласен, что все это обычно (очень) сложно использовать (из-за множества доступных структур и реализаций), но когда вы думаете о том, как это работает концептуально, это довольно приятно.
Точные детали будут зависеть от технологий, выбранных вами для разработки портлета. Но я чувствую, что должен быть способ сделать то, что вы хотите, используя API портлетов.