JSF
中的
FacesContext
对象详解
在
Faces API
中有两个类是要经常使用的
.
一个是
FacesContext
一个是
ExternalContext.
首先讲解如何使用
FacesContext .
对每个
JSF
请求,
FacesServlet
对象都会为其获取一个
javax.faces.context.FacesContext
类
的
实
例
。
FacesServlet
对
象
将
下
列
3
个
取
自
Web
容
器
的
对
象
传
给
javax.faces.context.FacesContextFactory
对象的
getFacesContext
方法,以此来做到这一点:
●
javax.servlet.ServletContext
●
javax.servlet.ServletRequest
●
javax.servlet.ServletResponse
这意味着
FacesContext
的实例里包含了所有处理
JSF
请求所需的每个请求的状态信息。
3.2.1
获取当前实例
一个经常用到的方法是静态的
getCurrentInstance
方法,
它返回当前的
FacesContext
实例。
此方法的签名如下:
public static FacesContext getCurrentInstance()
下面的代码是一个用此方法获取
FacesContext
当前实例的例子:
FacesContext facesContext = FacesContext.getCurrentInstance();
3.2.2
获取和修改组件树
FacesContext
实例里最重要的内容是请求页面的组件树。
组件树是由
javax.faces.tree.Tree
类来表示的。
FacesContext
实例的
tree
属性就是
Tree
对象。
要获取或修改
Tree
对象,可使用
tree
属性的读取方法和赋值方法:
public abstract Tree getTree()
public abstract void setTree(Tree tree)
3.2.3
添加和获取消息
在请求处理生命周期里,
可能会遇到错误。比如,
当验证器执行输入验证时,因为用户
输入了不正确的值,
验证可能失败;
当组件试图把输入值转换为绑定到组件的模型对象所需
的类型时,也可能会失败。所有消息都必须存放到
FacesContext
实例里以备后面进行处理。
比如,您可能希望在页面里显示错误消息,从而为用户更正错误提供帮助。
错
误
消
息
是
由
javax.faces.application.Message
接
口
来
表
示
的
,
您
可
以
通
过
使
用
FacesContext
类的
addMessage
方法向
FacesContext
实例里添加
Message
对象。这个方法的
签名如下:
public abstract void addMessage(UIComponent component, Message message)
如果
component
不为空,新加入的
message
就关联到
component
上。否则,它就不与任
何特定组件的实例相关。
举例来说,验证器在验证组件值失败时可调用
FacesContext
的
addMessage
方法,传入
值无效的组件及一个包含特定错误消息的
Message
对象。
所有添加到
FacesContext
实例的
Message
对象都被加入到一个集合里。可通过调用
getMessages
方法的两个重载方法之一来获取加入的
Message
对象:
public abstract Iterator getMessages()