从这些隐式对象中获取属性有什么区别:
renderRequest.getAttribute("myVar")
actionRequest.getAttribute("myVar")
request.getAttribute("myVar")
为什么他们都被允许?
我的意思是你通常将属性存储在
actionRequest
或 renderRequest
对象,但您可以在 request
中获取它隐式对象,为什么?正确的做法是什么?
如何在 View 时间内获取 Action 对象?
是不是违反了 action-render 的 renderParams 传递机制?
如果 actionRequest/response 抛出
NullPointerException
,为什么它们可以作为隐式对象使用在 JSP 中尝试使用它们时?最后什么时候在请求中存储属性有用(
PortalUtil.getOriginalServletRequest
)?
最佳答案
访问请求属性的正确方法是什么?
在 portlet 中,正确的方法是只与 renderRequest
交互。用于检索参数值以及获取或设置请求属性(在 JSP 或 portlet 类中)。 renderResponse
可用于创建新的 Portlet URL。
为什么可以从request
获取请求属性对象呢? request
是 HttpServletRequest
和 renderRequest
是 PortletRequest
.但是,Liferay 实现了 request
作为 HttpServletRequest
的包装器以这样的方式,例如对于访问请求属性,它将回退到 PortletRequest
如果在实际中没有找到该属性 HttpServletRequest
.
actionRequest
有什么用和 actionResponse
在查看时间?
就像你说的,如果你遵循MVC的原则,你只会将JSP用于 View 逻辑。如果您查看 DefineObjectsTag
从Liferay,你可以看到所有这些xxxRequest
和 xxxResponse
仅当 portlet 处于正确的生命周期时才设置对象。因为,通常情况下,您在执行 JSP 逻辑时处于 RENDER_PHASE 中,只有 renderRequest
和 renderResponse
将不为空。
何时将属性存储在 request
中有用?
将属性存储在 HttpServletRequest
中实际上没有意义如果您正在使用 portlet。另一方面,在 servlet(过滤器)中,您可以添加属性,然后可以使用 request.getAttribute("xxx")
从 portlet 中检索这些属性。 .
关于java - Liferay 中不同的 "request"隐式对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12056066/