JSF规范四.docx

上传人:b****7 文档编号:9833005 上传时间:2023-02-06 格式:DOCX 页数:14 大小:22.21KB
下载 相关 举报
JSF规范四.docx_第1页
第1页 / 共14页
JSF规范四.docx_第2页
第2页 / 共14页
JSF规范四.docx_第3页
第3页 / 共14页
JSF规范四.docx_第4页
第4页 / 共14页
JSF规范四.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

JSF规范四.docx

《JSF规范四.docx》由会员分享,可在线阅读,更多相关《JSF规范四.docx(14页珍藏版)》请在冰豆网上搜索。

JSF规范四.docx

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。

例如:

en

de

fr

es

这个应用的默认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}’’

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1