JSF规范四.docx
- 文档编号:9833005
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:14
- 大小:22.21KB
JSF规范四.docx
《JSF规范四.docx》由会员分享,可在线阅读,更多相关《JSF规范四.docx(14页珍藏版)》请在冰豆网上搜索。
JSF规范四
JSF规范(四)
本文是基于JSF规范的翻译而来,并省掉一些无关紧要的章节。
如有不当之处请大家指正。
作者:
youfly email:
seedcloned-pub@
转载请注明出处:
2.5Conceptsthatimpactseverallifecyclephases
本章试图通过给读者提供一个影响“请求处理生命周期”各个阶段的一些复杂概念的“bigpicture”视图。
2.5.1ValueHandling
在基本原理层面,JavaServerFaces提供了一个从用户那里获取数据并提供给模型层处理的一个途径。
关于从用户到模型的值处理流在这份规范的其他地方描述,但是可以从这里得到一个整体的认识。
下面的描述假定是JSP/HTTP的情形,并且所有的组件都拥有Renderers。
2.5.1.1ApplyRequestValuesPhase
当用户点击按钮并且引发提交,将发送name=value对形式的HTTP请求POST数据到服务器中。
这就进入了JSF的“请求处理生命周期”,并且最终我们进入了ApplyRequestValues阶段。
在这个阶段视图中的每个组件的每个Renderer上的decode()方法被调用。
Renderer从请求中取出值,并将这些值传递给组件的setSubmittedValue()方法,当然,这些组件应该是EditableValueHolder的实例。
如果组件的”immediate”属性被设置成true,我们在decoding后将立即执行验证。
请阅读下面的内容以得到执行验证时所发生的事情。
2.5.1.2ProcessValidatorsPhase
视图根的processValidators()方法被调用。
对于视图中的每一个EditableValueHolder,要是”immediate”属性没有设置,我们将执行视图中的每一个UIInput的验证。
否则,则表示验证已经被执行,这个阶段不需要作任何处理。
2.5.1.3ExecutingValidation
请阅读javadoc文件当到UIInput.validate()方法更为详细的信息,但基本上,这个方法从组件中获取提交的值(在ApplyRequestValues期间被设置),取得组件的Renderer并调用它的getConvertedValue()方法,并传递到取的值给这个方法。
如果发生数据转换错误,则按照这个getConvertedValue方法的javadoc文档描述进行处理。
否则,所有和这个组件绑定的validators被请求来验证转换的值是否合法。
如果发生验证错误,则按照Validator.validate()方法的javadoc描述进行处理。
转换值通过组件的setValue()设置到组件中,如果值被改变,则触发ValueChangeEvent事件。
2.5.1.4UpdateModelValuesPhase
视图中的每一个UIInput组件,它们的updateModel方法被调用。
这个方法只是在验证期间组件的本地值(Localvalue)被设置并且页面的作者配置了设置这个组件值到模型(Model)层的时候才有效。
这个阶段只是简单的根据页面作者的配置将UIInput组件转换成功的本地值设置到模型(Model)中。
在试图将值设置到模型(Model)层时所发生的任何错误都按照UIInput.updateModel()方法的javadoc文档描述来处理。
2.5.2LocalizationandInternationalization(L10N/I18N)
JavaServerFaces被完全的国际化,JavaServerFaces提供的I18N能力是基于Servlet,JSP及JSTL规范提供的I18N概念。
I18Nhappensatseveralpointsintherequestprocessinglifecycle,butitiseasiesttoexplainwhatgoesonby
breakingthetaskdownbyfunction.
2.5.2.1DeterminingtheactiveLocale
JSF用活动Locale的概念来查找所有的本地化资源。
转换器必须使用这个Locale来执行他们的转换。
Locale保存在当FacesContext的UIViewRoot的localeJavaBeans属性中。
应用开发者可以通过配置文件WEB-INF/faces-config.xml来告诉JSF当前应用所支持的locales。
例如:
这个应用的默认locale是en,但是它支持de,fr及es等locales。
这些元素将引起Application实例封装Locacle数据。
请阅读javadocs文档以得到更为详细的信息。
在ViewHandler执行createView()方法期间,决定并设置UIViewRoot对象的locale。
这个方法必须根据应用所支持的Locale及用户参数来决定当前的活动Locale。
请阅读javadocs文档以得到更为详细的信息。
应用能够直接的调用UIViewRoot.SetLocale()方法,但页面的作者也可以通过 view>标记来覆盖UIViewRoot的locale属性。 这个属性值必须以language[{- |_}country[{-|_}variant]]的形式指定,且不能包含冒号,例如”ja_JP_SJIS”。 片段之间的分隔符可以是'-'或者'_'。 在所有使用JSP的情况下,活动locale通过Config.FMT_LOCALE这个key被设置进“requestscope”的JSTL类javax.servlet.jsp.jstl.core.Config类中。 2.5.2.2DeterminingtheCharacterEncoding 请求和响应的字符集编码通下面列的方法被设置和说明。 一个初始的JSFweb应用请求,它的字符集编码是否保持未更改状态,依赖于request对象正确的解析request参数。 在render-response阶段的开始,ViewHandler必须确保responseLocale设置到UIViewRoot中,例如在servlet环境中调用ServletResponse.setLocale()方法。 设置response的Locale将影响response的字符集编码,请阅读Servlet和Porlet规范得到更为详细的信息。 在render-response阶段的结束,ViewHandler必须使用众所周知的实现依赖的key将response(例如servlet或者portletResponse)的字符集编码保存在session(仅仅在session存在时)中。 在后续的postback处理中,任何调用访问requestparameters的ExternalContext方法被调用前,ViewHandler必须检查Content-Type头,取得charset属性,并用取到的值设置request对象的字符集编码。 如果Content-Type头没有包含charset属性,则用先前保存在session(仅仅在session存在时)中的字符集编码设置request对象的编码。 如果没有任何字符集编码找到,则应该保持请求的字符集编码不变。 上面的算法提供了一个让有特殊需求应用可以调整request和response字符的机制。 如例JSP页面可通过page指示符设置页面的contentType属性使用固定的字符集编码,请阅读servlet,portlet及jsp规范得到更为详细的信息。 注意,Servlet2.4及JSP2.0之前的字符集编码规则并不精确,因此我们要特别注意不同容器之间的移植。 2.5.2.3LocalizedText 没有直接支持本地化文本的API,但JSP层提供了一个便利的标记来将ResourceBundle转换成java.util.Map,并保存它到命名空间中,因此我们可以得到它。 这一节描述如果将本地化的文本显示给最终用户。 这些包括图片,标签,按钮文本,提示等。 自从所有的JSF组件允许从模型层得到它们的显示信息,因此就容易的通过模块层进行本地化。 为了方便,JSF提供了一个 loadBundle>标记,这个标记能够将ResourceBundle载入到Map中,并将它requestscope的命名空间中,因此在模型层就可以用相同的机制来访问这些数据。 例如: loadBundlebasename=”com.foo.industryMessages.chemical”var=”messages”/> outputTextvalue=”#{messages.benzene}”/> 这将引起名称为com.foo.industryMessages.chemical的ResourceBundle载入到Map中,并保存到key为messagesrequest属性中。 本地化内容能够通过一般的值表达式语法取出。 2.5.2.4LocalizedApplicationMessages 这节描述了JSF如如何处理在转换,验证,或其他applicationaction时发送的错误及提示信息。 JSF类javax.faces.application.FacesMessage提供了封装的消息摘要,详细及级别信息。 JSF实现必须提供包含所有标准消息的javax.faces.MessagesResourceBundle。 下面列出所有的标准消息(和非标准的预留消息文本)key: ■ponent.UIInput.CONVERSION--{0}: Conversionerroroccurred ■ponent.UIInput.REQUIRED--{0}: ValidationError: Valueisrequired ■ponent.UIInput.UPDATE--{0}: Anerroroccurredwhenprocessingyour submittedinformation ■ponent.UISelectOne.INVALID--{0}: ValidationError: Valueisnotvalid ■ponent.UISelectMany.INVALID--{0}: ValidationError: Valueisnot valid ■javax.faces.converter.BigDecimalConverter.DECIMAL={2}: ''{0}''mustbeasigned decimalnumber. ■javax.faces.converter.BigDecimalConverter.DECIMAL_detail={2}: ''{0}''mustbea signeddecimalnumberconsistingofzeroormoredigits,thatmaybefollowedbya decimalpointandfraction.Example: {1} ■javax.faces.converter.BigIntegerConverter.BIGINTEGER={2}: ''{0}''mustbeanumber consistingofoneormoredigits. ■javax.faces.converter.BigIntegerConverter.BIGINTEGER_detail={2}: ''{0}''mustbea numberconsistingofoneormoredigits.Example: {1} ■javax.faces.converter.BooleanConverter.BOOLEAN={1}: ''{0}''mustbe'true'or'false'. ■javax.faces.converter.BooleanConverter.BOOLEAN_detail={1}: ''{0}''mustbe'true'or 'false'.Anyvalueotherthan'true'willevaluateto'false'. ■javax.faces.converter.ByteConverter.BYTE={2}: ''{0}''mustbeanumberbetween0and 255. ■javax.faces.converter.ByteConverter.BYTE_detail={2}: ''{0}''mustbeanumberbetween 0and255.Example: {1} ■javax.faces.converter.CharacterConverter.CHARACTER={1}: ''{0}''mustbeavalid character. ■javax.faces.converter.CharacterConverter.CHARACTER_detail={1}: ''{0}''mustbea validASCIIcharacter. ■javax.faces.converter.DateTimeConverter.DATE={2}: ''{0}''couldnotbeunderstoodasa date. ■javax.faces.converter.DateTimeConverter.DATE_detail={2}: ''{0}''couldnotbe understoodasadate.Example: {1} Chapter2RequestProcessingLifecycle2-19 ■javax.faces.converter.DateTimeConverter.TIME={2}: ''{0}''couldnotbeunderstoodasa time. ■javax.faces.converter.DateTimeConverter.TIME_detail={2}: ''{0}''couldnotbe understoodasatime.Example: {1} ■javax.faces.converter.DateTimeConverter.DATETIME={2}: ''{0}''couldnotbe understoodasadateandtime. ■javax.faces.converter.DateTimeConverter.DATETIME_detail={2}: ''{0}''couldnotbe understoodasadateandtime.Example: {1} ■javax.faces.converter.DateTimeConverter.PATTERN_TYPE={1}: A'pattern'or'type' attributemustbespecifiedtoconvertthevalue''{0}''. ■javax.faces.converter.DoubleConverter.DOUBLE={2}: ''{0}''mustbeanumberconsisting ofoneormoredigits. ■javax.faces.converter.DoubleConverter.DOUBLE_detail={2}: ''{0}''mustbeanumber between4.9E-324and1.7976931348623157E308Example: {1} ■javax.faces.converter.EnumConverter.ENUM={2}: ''{0}''mustbeconvertibletoanenum. ■javax.faces.converter.EnumConverter.ENUM_detail={2}: ''{0}''mustbeconvertibletoan enumfromtheenumthatcontainstheconstant''{1}''. ■javax.faces.converter.EnumConverter.ENUM_NO_CLASS={1}: ''{0}''mustbe convertibletoanenumfromtheenum,butnoenumclassprovided. ■javax.faces.converter.EnumConverter.ENUM_NO_CLASS_detail={1}: ''{0}''mustbe convertibletoanenumfromtheenum,butnoenumclassprovided. ■javax.faces.converter.FloatConverter.FLOAT={2}: ''{0}''mustbeanumberconsistingof oneormoredigits. ■javax.faces.converter.FloatConverter.FLOAT_detail={2}: ''{0}''mustbeanumber between1.4E-45and3.4028235E38Example: {1} ■javax.faces.converter.IntegerConverter.INTEGER={2}: ''{0}''mustbeanumber consistingofoneormoredigits. ■javax.faces.converter.IntegerConverter.INTEGER_detail={2}: ''{0}''mustbeanumber between-2147483648and2147483647Example: {1} ■javax.faces.converter.LongConverter.LONG={2}: ''{0}''mustbeanumberconsistingof oneormoredigits. ■javax.faces.converter.LongConverter.LONG_detail={2}: ''{0}''mustbeanumberbetween -9223372036854775808to9223372036854775807Example: {1} ■javax.faces.converter.NumberConverter.CURRENCY={2}: ''{0}''couldnotbeunderstood asacurrencyvalue. ■javax.faces.converter.NumberConverter.CURRENCY_detail={2}: ''{0}''couldnotbe understoodasacurrencyvalue.Example: {1} ■javax.faces.converter.NumberConverter.PERCENT={2}: ''{0}''couldnotbeunderstoodas apercentage. 2-20JavaServerFacesSpecification•May2006 ■javax.faces.converter.NumberConverter.PERCENT_detail={2}: ''{0}''couldnotbe understoodasapercentage.Example: {1} ■javax.faces.converter.NumberConverter.NUMBER={2}: ''{0}''isnotanumber. ■javax.faces.converter.NumberConverter.NUMBER_detail={2}: ''{0}''isnotanumber. Example: {1} ■javax.faces.converter.NumberConverter.PATTERN={2}: ''{0}''isnotanumberpattern. ■javax.faces.converter.NumberConverter.PATTERN_detail={2}: ''{0}''isnotanumber pattern.Example: {1} ■javax.faces.converter.ShortConverter.SHORT={2}: ''{0}''mustbeanumberconsistingof oneormoredigits. ■javax.faces.converter.ShortConverter.SHORT_detail={2}: ''{0}''mustbeanumber between-32768and32767Example: {1} ■javax.faces.converter.STRING={1}: Couldnotconvert''{0}''toastring. ■javax.faces.validator.DoubleRangeValidator.MAXIMUM--{1}: ValidationError: Valueis greaterthanallowablemaximumof‘’{0}’’ ■javax.faces.validator.DoubleRangeValidator.MINIMUM--{1}: ValidationError: Valueis lessthanallowableminimumof‘’{0}’’
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JSF 规范