默认Web对象源,它是 {@linkplain WebObjectSource Web对象源}的一个默认实现, 使用Servlet环境的 {@linkplain HttpServletRequest}、 {@linkplain HttpSession}、 {@linkplain ServletContext}作为底层对象源。
当从默认Web对象源获取某个关键字对应的对象时(通过 {@linkplain #get(Serializable,Type)}方法),它会依次从这三个底层对象源中查找对象,如果在任意一个中找到匹配,那个匹配对象将被返回,否则, 它会把这个关键字理解为请求参数过滤器,然后从请求参数中过滤和获取对象并返回。
在从请求参数获取对象时,它会做一些特殊的处理:如果这个关键字直接对应某个请求参数,那么那个请求参数的值将被返回;否则,它会以“[关键字].”作为过滤器(加一个'.'字符), 筛选请求参数映射表中仅以这个过滤器开头的项,生成一个新的映射表并将它返回,并且这个新映射表的关键字将只是原请求参数映射表关键字的这个过滤器之后的部分。 比如有参数名为“somePrefix.someBean.propertyA”和“somePrefix.someBean.propertyB”的请求参数值, 那么在以“somePrefix.someBean”为关键字从默认Web对象源获取之后,新的映射表关键字将变为“propertyA”和“propertyB”。
如果默认Web对象源从底层对象源中获取的对象与期望的对象类型不匹配,它将会使用 {@linkplain WebGenericConverter Web通用转换器}将这个对象转换为期望类型的对象。
当将对象保存到默认Web对象源时(通过 {@linkplain #set(Serializable,Object)}方法),对象将会被直接保存到 {@linkplain HttpServletRequest}中。
默认Web对象源还提供了一些用于标识作用域的特殊关键字,包括“param”、“request”、“session”、“application”、“response”、“objectSource”:
- param
表示整个请求参数映射表,使用它可以从默认Web对象源获取整个请求参数映射表,也可以使用“param.someKey”形式的关键字,指明是从请求参数中过滤和获取对象。 - request
表示 {@linkplain HttpServletRequest}对象,使用它可以从默认Web对象源获取当前请求对象, 也可以使用“request.someKey”形式的关键字,指明是从当前请求对象属性中获取对象或者将对象保存到请求对象属性中。 - session
表示 {@linkplain HttpSession}对象,使用它可以从默认Web对象源获取当前会话对象, 也可以使用“session.someKey”形式的关键字,指明是当前从会话对象属性中获取对象或者将对象保存到会话对象属性中。 - application
表示 {@linkplain ServletContext}对象,使用它可以从默认Web对象源获取当前应用对象, 也可以使用“application.someKey”形式的关键字,指明是从当前应用对象属性中获取对象或者将对象保存到应用对象属性中。 - response
表示 {@linkplain HttpServletResponse}对象,使用它可以从默认Web对象源获取当前响应对象。 - objectSource
表示 {@linkplain WebObjectSource Web对象源}本身,使用它可以获取当前的Web对象源引用。
注意,如果你是要从默认Web对象源获取“request”、“session”、“application”、“response”、“objectSource”这些对象,而期望类型与与它们的类型不同, 那么你需要为默认Web对象源使用的 {@linkplain WebGenericConverter Web通用转换器}添加这些对象表示的类型到你所期望类型的辅助转换器。
@author earthangry@gmail.com
@date 2010-7-19