java - Liferay 中不同的 "request"隐式对象

标签 java servlets attributes request liferay

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

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

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

如何在 View 时间内获取 Action 对象?
是不是违反了action-render的renderParams传递机制?
如果在 JSP 中尝试使用它们时抛出 NullPointerException,为什么 actionRequest/response 可以作为隐式对象使用?

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

最佳答案

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

为什么您也可以从request 对象中获取请求属性? request 是一个 HttpServletRequestrenderRequest 是一个 PortletRequest。然而,Liferay 将 request 实现为 HttpServletRequest 的包装器,例如,为了访问请求属性,如果在实际的 HttpServletRequest 中找不到该属性,它将回退到 PortletRequest

actionRequestactionResponse 在查看时有什么用? 就像你说的,如果你遵循 MVC 的原则,你将只使用 JSP 来处理 View 逻辑。如果您检查 Liferay 的 DefineObjectsTag,您可以看到所有这些 xxxRequestxxxResponse 对象只有在 portlet 处于正确的生命周期中时才会设置.因为,通常情况下,您在执行 JSP 逻辑时处于 RENDER_PHASE,只有 renderRequestrenderResponse 不会为空。

什么时候在请求中存储属性有用? 如果您使用的是 portlet,那么将属性存储在 HttpServletRequest 中实际上没有意义。另一方面,在 servlet(过滤器)中,您可以添加属性,然后可以使用 request.getAttribute("xxx") 从 portlet 中检索这些属性。

关于java - Liferay 中不同的 "request"隐式对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12056066/

相关文章:

java - 在 java servlet 中创建异步进程

xml - XSD 属性前缀命名空间

使用布局限定符时未缓冲顶点属性的 OpenGL 默认值

java - 想要将Jetty设置为热部署,但是没有部署器

python - 无法获取内置类型

java - session bean 中的静态变量限制

java多线程与可运行接口(interface)

java - 如何使 LibGDX Actions moveTo() 以曲线形式从一个点到另一个点进行动画处理?

java - 如何在 Spring MVC Web 应用程序中确认电子邮件地址

java - 在tomcat8中启动.war servlet