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

原文 标签 java servlets attributes request liferay

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

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

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

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

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

最佳答案

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

为什么可以从request获取请求属性对象呢? requestHttpServletRequestrenderRequestPortletRequest .但是,Liferay 实现了 request作为 HttpServletRequest 的包装器以这样的方式,例如对于访问请求属性,它将回退到 PortletRequest如果在实际中没有找到该属性 HttpServletRequest .

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

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

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

相关文章:

java - 如何使用 Java 在没有科学记数法的情况下打印 double 值?

javascript - css 和 javascript 文件上的 Java Web 应用程序 error_404

python - Selenium + Python : check attribute value

python - 自动更新 Python 类属性的最佳方法

java - 从Java将日期插入SQL Server-格式不正确

java - selenium RemoteWebDriver firefox 产生 NullPointerException

java - 使用Linux Terminal在Java中打开PDF

java - 需要通过一个http输出流发送多个对象

java - Maven 依赖 javax.servlet 必须包含在新构建服务器的 POM 中

c# - 自动记录和统计(C# 应用程序)