永发信息网

在jsf中,请求处理的生命周期是怎样的

答案:1  悬赏:40  手机版
解决时间 2021-11-20 07:09
在jsf中,请求处理的生命周期是怎样的
最佳答案
在Faces API中有两个类是要经常使用的. 一个是FacesContext 一个是ExternalContext, 本篇文章讲解如何使用前者, 在下面的一篇文章中在继续讲解任何使用后者:
对每个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-1展示了FacesContext实例里封装的其他一些对象。
如何使用FacesContext类
图3-1  FacesContext实例及其封装的对象
3.2.1  获取当前实例
一个经常用到的方法是静态的getCurrentInstance方法,它返回当前的FacesContext实例。此方法的签名如下:
public static FacesContext getCurrentInstance()
下面的代码是一个用此方法获取FacesContext当前实例的例子:
FacesContext facesContext = FacesContext.getCurrentInstance();
3.2.2  获取和修改组件树
FacesContext实例里最重要的内容是请求页面的组件树。组件树是由javax.faces.tree.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接口(第11章再详细讨论)来表示的,您可以通过使用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()
public abstract Iterator getMessages(UIComponent component)
第一种形式的调用在一个Iterator里返回所有Message对象,而第二种形式的调用则仅返回与给定UIComponent相关联的Message对象。
3.2.4  添加和获取请求处理事件
UIComponent可以生成FacesEvent对象。比如,当单击一个UICommand组件时,它会生成一个ActionEvent对象(ActionEvent类是FacesEvent类的子类)。这个FacesEvent对象需要在FacesContext实例里保存起来,以备请求处理生命周期里的下一步处理事件时所用。
可通过使用FacesContext类的addFacesEvent方法向FacesContext实例添加FacesEvent对象。此方法的签名如下:
public abstract void addFacesEvent(FacesEvent event)
要提取先前添加的FacesEvent对象,可调用getFacesEvents方法,其签名如下:
public abstract Iterator getFacesEvents()
此方法返回FacesEvent时的顺序与其在队列中的顺序一致。
3.2.5  向Response对象里写入信息
为了向Response对象里写入信息,FacesContext类提供了两个属性,一个是javax.faces.Context.ResponseStream类型,另一个是javax.faces.context.ResponseWriter类型。ResponseStream类型的对象用于输出二进制数据,而ResponseWriter类型的对象则用于输出字符。这些属性的读取方法和赋值方法如下:
public abstract ResponseStream getResponseStream()
public abstract void setResponseStream(ResponseStream responseStream)
public abstract ResponseWriter getResponseWriter()
public abstract void setResponseWriter(ResponseWriter responseWriter)
3.2.6  获取和设置地区
第11章将会讨论到,JSF支持国际化和本地化。这意味着您可以根据用户的地区决定发送什么样的回应信息。locale属性里存放了当前处理中所用的Locale对象。
初始状况下,locale属性的值和网络浏览器里指定的地区是一样的,但可以修改这个值,从而发送输出所使用的地区将独立于浏览器所使用的地区。此属性的读取方法和赋值方法如下:
public abstract Locale getLocale()
public abstract void setLocale(Locale locale)
3.2.7  操作请求处理生命周期
FacesContext类还提供了两个方法与请求处理生命周期进行交互:
●       在当前阶段的处理完成后,调用renderResponse方法通知JSF实现把控制权转到呈现响应阶段。也就是说,处于当前阶段和呈现响应阶段之间的所有其他阶段都不再执行。
●       调用responseComplete方法,告诉JSF实现此次请求的HTTP响应已经完成(比如在使用了HTTP重定向的情况下)。因此,当前阶段完成后,必须中止请求处理生命周期的处理。
这些方法的签名如下:
public abstract void renderResponse()
public abstract void responseComplete()
3.2.8  获取其他请求状态信息
其他每个请求的状态信息封装在ExternalContext对象里,可以使用getExternalContext方法获取该对象:
public abstract ExternalContext getExternalContext()
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
为什么总会嫉妒别人?
姓李 叫李小什么好听? 男的。。。
人类怎样利用细菌为自己服务的,这个怎么做啊
1988年11月26农历出生是什么星座
醉玲珑插曲有哪些 醉玲珑插曲歌词盘点
在zblog中发表了一篇文章但是全文阅读打不开
4.72km有多远
关于火焰切割,热影响区如何来判定,厚度为50
单反相机直接连接电视机的话拍照时可以同步显
外汇一年才做二三次的行情的,是看多大周期的
姓张的和姓高的姻缘怎么样?
如来佛祖有父母么,他们各叫什么名字呀那里人
中山市华工空调净化技术有限公司怎么样?
公司辞退员工要让员工写离职单吗
中灿苑到朝阳区国贸数码01大厦26楼怎么走
推荐资讯
突然间发现,除了当年上学时候的老师,没有人
梦幻王国地址有知道的么?有点事想过去!
我将红尘里的江山看了一场 这段话是出自哪的
中国武警T恤衫敢穿吗
为什么我的vivo y27不能用自拍杆,别的手机都
红牛,乐虎,黑卡,启力,中沃,哪个更好喝
2-氨基-2-苯基丁酸CAS 5438-07-3是什么的中间
属牛女1997年出生34月23日21点出生什么命人
古地名谯国 是现在的那个城市或者地区啊
我是85年1月2日出生的,能否帮我细批一下08年
住宅通信费是什么
急求水浒传第101~120回的故事简介
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?