2024年4月19日发(作者:)
第1章 JSF EL
JavaServer Faces 提供了一种在 Web 应用程序页面中使用的表达式语言 (JSF
EL),用来访问位于页面 Bean 以及其他与 Web 应用程序关联的 Bean(如会话
Bean 和应用程序 Bean)中的 JavaBeans 组件。在大多数情况下,IDE 都会为
您指定正确的表达式,例如,当您将组件的 text 属性绑定到数据提供器或
JavaBean 属性时。
JavaServer Faces 表达式语言语法使用分隔符 #{},如以下内容所述。
JavaServer Faces 表达式既可以是值绑定表达式(用于将 UI 组件或其值绑定
到外部数据源中),也可以是方法绑定表达式(用于引用支持 Bean 方法)。该
表达式还可以接受混合的类型和计算语法,以及 2.0 表达式语言的运算符。
第2章 JavaServer Faces EL 表达式语法
JSF EL 可用于将 JavaBeans 绑定到组件属性,以简化组件从各种源访问数据的
方式。JSF EL 表达式使用语法 #{expr};
值绑定表达式的语法与 JavaServer Pages 规范(版本 2.0)2.3 节至 2.9 节
中定义的表达式语言表达式的语法类似,但是具有以下不同之处:
值绑定表达式的表达式分隔符是 #{ 和 },而不是
${ 和 }。
值绑定表达式不支持 JSP 表达式语言函数。
除了在分隔符方面存在区别外,这两种表达式类型在以下语义方面也有所不同:
在呈现期间,值绑定表达式由 JavaServer Faces 实现(通过调用
getValue 方法)进行计算,而不是由页面的编译代码进行计算。
即使没有出现页面,也可以采用编程方式计算值绑定表达式。
值绑定表达式计算通过当前 Web 应用程序的 Application 对象,利用已
配置的 VariableResolver 和 PropertyResolver 对象的可用功能,应用
程序可为其提供能够带来额外功能的插件替换类。
如果值绑定表达式用于 EditableValueHolder 组件(任何输入字段组件)
的值属性,则该表达式可用于修改引用的值,而不是在请求处理生命周期
的“更新模型值”阶段对其进行检索。
有效的值绑定表达式示例包含:
#{}
#{}
#{Foo[bar]}
#{Foo[“bar”]}
#{Foo[3]}
#{Foo[3].bar}
#{[3]}
#{ == ‘VIP’}
#{(eitTemp - 32) * 5 / 9}
Reporting Period: #{te} to #{}
对于要调用 setValue 方法的值绑定表达式(例如,在更新模型值期间输入字段
的 text 属性绑定),其语法被限于使用以下任一格式,其中 expr-a 是用于计
算某个对象的常规表达式,value-b 是一个标识符:
#{-b}
#{expr-a[value-b]]
#{value-b}
第3章 获取值语义
当调用 ValueBinding 实例的 getValue 方法(例如,在页面呈现期间计算 JSP
标记属性上的表达式),并计算该表示式时,将返回计算的结果,计算方法如下:
该表达式语言统一了对 . 和 [] 运算符的处理方式。-b 等
同于 a["expr-b"];即表达式 expr-b 用于构造其值为标识符的类型,然
后 [] 运算符将与该值一起使用。
由 VariableResolver 实例计算表达式中最左侧的标识符,该实例是从此
Web 应用程序的 Application 实例中获得的。如果位于 . 或 [] 运算符
左侧的值是 RowSet,则右侧的对象将被视为列名称。有关这些运算符的
完整计算说明,请参见下一节。
由 PropertyResolver 实例计算表达式中 . 或 [...] 运算符的每个实
例,PropertyResolver 是从此 Web 应用程序的 Application 实例中获
得的。
使用 . 运算符来访问变量的属性,然后可以随意进行嵌套。
第4章 设置值语义
在调用 ValueBinding 的 setValue 方法时(例如,在更新模型值期间输入字段
的 text 属性绑定),值绑定语法的限制如上一部分中所述。实现必须执行以下
处理才能计算 #{-b} 或 #{expr-a[value-b]} 格式的表达式:
将 expr-a 计算为 value-a。
如果 value-a 为空,则抛出 PropertyNotFoundException。
如果 value-b 为空,则抛出 PropertyNotFoundException。
如果 value-a 为映射,则调用 (value-b, new-value)。
如果 value-a 是 List 或数组:
将 value-b 强制为 int,从而在出现错误时抛出
ReferenceSyntaxException。
o
在适当的时候尝试执行 (value-b, new-value) 或
(value-b, new-value)。
o
如果 IndexOutOfBoundsException 或
ArrayIndexOutOfBoundsException 已被抛出,则还会抛出
PropertyNotFoundException。
o
如果已出现其他异常,则会抛出 EvaluationException。
否则执行以下操作(value-a 是 JavaBeans 对象):
o
将 value-b 强制为 String。
o
如果 value-b 是 value-a 的可编写属性(按照每个 JavaBeans
规范),则调用 setter 方法(传递 new-value)。如果出现异常,
则抛出 ReferenceSyntaxException。
o
否则,将抛出 PropertyNotFoundException。
o
如果整个表达式包括一个标识符,则会应用以下规则:
如果标识符与以下描述的任一隐式对象的名称相匹配,
则抛出 ReferenceSyntaxException。
否则,如果标识符与请求范围、
会话范围或应用程序范围中属性的关键字相匹配,则相应的属性值将被
new-value
替换。
否则,将创建新的请求范围属性,其关键字是
标识符,而其值是 new-value。
第5章 隐式对象
表达式语言定义一组隐式对象:
facesContext - 当前请求的 FacesContext 实例。
param - 将请求参数名称映射到单个值中。
paramValues - 将请求参数名称映射到值的数组中。
header - 将请求标题名称映射到单个值中。
headerValues - 将请求标题名称映射到值的数组中。
cookie - 将 cookie 名称映射到单个 cookie 中。
initParam - 将上下文初始化参数名称映射到单个值中。
允许访问各种范围的变量的对象:
requestScope - 将请求范围的变量名称映射到它们的值中。
sessionScope - 将会话范围的变量名称映射到它们的值中。
applicationScope - 将应用程序范围的变量名称映射到它们的值中。
当表达式按名称引用其中一个对象时,将返回相应的对象。隐式对象比同名属性
的优先级要高。例如,即使现有 facesContext 属性包含一些其他值,
#{facesContext} 也将返回 FacesContext 对象。
第6章 类型
表达式语言定义了以下类型:
布尔型:true 和 false
整型:与 Java 中一样
浮点型:与 Java 中一样
字符串型:使用单引号和双引号;" 转义为 ", ' 转义为 ',而 转
义为 。
空:null
第7章 运算符
除了在上述获取值语义和之后的章节中讨论的 . 和 [] 运算符外,表达式语言
还提供以下运算符:
算术运算符:+、-
(二元)
、*、/、div、%、mod、-
(一元)
逻辑运算符:and、&&、or、||、not、!
关系运算符:==、eq、!=、ne、<、lt、>、gt、<=、ge、>=、le。可以与
其他值、或布尔型、字符串型、整型或浮点型相比较。
空运算符:empty 运算符是可以用来确定值是否为 null 或空的前缀运
算。
条件运算符:A ?B : C。计算 B 或 C,具体情况取决于 A 的计算结果。
按从高到低,从左到右的顺序排列的运算符优先级如下所示:
[] .
()
(更改运算符的优先级)
-
(一元)
not ! empty
* / div % mod
+ -
(二元)
< > <= >= lt gt le ge
== != eq ne
&& and
|| or
? :
第8章 保留字
以下单词是为表达式语言而保留的,不能用作标识符:
and
div
empty
eq
false
ge
gt
le
lt
mod
not
Null
or
true instanceof ne
Sun
/docs/jscreator/help/2update1/jsp-jsfel/jsf_
expression_language_
2. from Java Enterprise in a NutShell
/read/others/0512/.a.
.2005_html//javaentnut3-CHP-5-SECT-


发布评论