Различные неявные объекты запроса в Liferay

В чем разница между извлечением атрибутов из этих неявных объектов:

renderRequest.getAttribute("myVar")
actionRequest.getAttribute("myVar")
request.getAttribute("myVar")

Почему все они разрешены?
Я имею в виду, что вы обычно храните атрибут в actionRequest или renderRequest объекте, но вы можете получить его в request неявном объекте, почему?
Каков правильный подход?

Как можно получить объект действия во время просмотра?
Не нарушает ли это механизм передачи action-render renderParams?
Почему actionRequest/response доступны как неявный объект, если они выдают NullPointerException при попытке использовать их в JSP?

Наконец, когда полезно хранить атрибут в запросе (PortalUtil.getOriginalServletRequest)?


person Whimusical    schedule 21.08.2012    source источник


Ответы (1)


Каков правильный подход к доступу к атрибутам запроса? В портлетах правильным подходом является взаимодействие только с renderRequest для получения значений параметров и для получения или установки атрибутов запроса (в JSP или классе портлета). renderResponse можно использовать для создания новых URL портлетов.

Почему вы также можете получить атрибуты запроса из объекта request? request — это HttpServletRequest, а renderRequest — это PortletRequest. Однако Liferay реализовал request как оболочку HttpServletRequest таким образом, что, например. для доступа к атрибутам запроса он вернется к PortletRequest, если не найдет атрибут в фактическом HttpServletRequest.

Какая польза от actionRequest и actionResponse во время просмотра? Как вы сказали, если вы следуете принципам MVC, вы будете использовать JSP только для логики просмотра. Если вы проверите DefineObjectsTag из Liferay, вы увидите, что все эти объекты xxxRequest и xxxResponse устанавливаются только в том случае, если портлет находится в правильном жизненном цикле. Поскольку обычно вы находитесь в RENDER_PHASE при выполнении логики JSP, только renderRequest и renderResponse будут ненулевыми.

Когда полезно хранить атрибут в request? На самом деле нет смысла хранить атрибуты в HttpServletRequest, если вы работаете с портлетами. С другой стороны, внутри сервлета (фильтра) вы можете добавить атрибуты, которые затем могут быть извлечены из портлетов с помощью request.getAttribute("xxx").

person p.mesotten    schedule 07.09.2012