6

从这些隐式对象中获取属性有什么区别:

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

为什么他们都被允许?
我的意思是您通常将属性存储在actionRequestrenderRequest对象中,但您可以在request隐式对象中获取它,为什么?
什么是正确的方法?

如何在视图时间内获得一个动作对象?
不违反action-render renderParams 传递机制吗?如果在 JSP 中尝试使用它们时
抛出 actionRequest/response,为什么它们可以作为隐式对象使用?NullPointerException

最后,在请求(PortalUtil.getOriginalServletRequest)中存储属性什么时候有用?

4

1 回答 1

7

访问请求属性的正确方法是什么? 在 portlet 中,正确的方法是只与renderRequest检索参数值以及获取或设置请求属性(在 JSP 或 portlet 类中)进行交互。renderResponse可用于创建新的 Portlet URL。

为什么你也可以从request对象中获取请求属性? request是一个HttpServletRequest并且renderRequest是一个PortletRequest。然而,Liferay以这样request的方式实现为包装器HttpServletRequest,例如,对于访问请求属性,PortletRequest如果它在实际中找不到该属性,它将回退到HttpServletRequest.

在查看时间actionRequest有什么用?actionResponse 就像你说的,如果你遵循 MVC 的原则,你只会将 JSP 用于视图逻辑。如果您检查DefineObjectsTag来自 Liferay 的内容,您可以看到所有这些xxxRequestxxxResponse对象仅在 portlet 处于正确的生命周期中时才被设置。因为,通常情况下,您在执行 JSP 逻辑时处于 RENDER_PHASE 中,renderRequest并且renderResponse不会为空。

什么时候将属性存储在request? HttpServletRequest如果您正在使用portlet ,那么 将属性存储在其中没有任何意义。另一方面,在 servlet(过滤器)中,您可以添加属性,然后可以使用request.getAttribute("xxx").

于 2012-09-07T13:21:43.380 回答