上面例子中,使用字符串’SOMESTOCK’作为buy方法的参数。
定义标签属性类型
如上一节所述,所有类型的表达式都可以用在标签属性中,立即和延迟表达式都会在使用过程中计算,取决于标签在VDL(视图描述语言)中定义的属性类型。
如果需要创建VDL中的个性化标签,需区分可以被接受的表达式类型。表格6-1列出了EL表达式接受的标签类型,例子和需要在VDL增加的属性类型定义。动态属性可以使用#{}语法,意味着属性接受运行时动态计算值。与之类似,${}语法不能用于延迟计算。
属性类型
表达式举例
属性类型定义
动态
“literal”
true
动态
${literal}
true
延迟值
“literal”
java.lang.String
延迟值
#{customer.age}
int
延迟方法
“literal”
java.lang.String submit()
延迟方法
#{customer.calcTotal}
double calcTotal(int, double)
表格6-1 EL表达式接受的标签属性定义
作为表格6-1中所列标签属性类型的附加,可以定义接受动态和延迟两种方式的表达式。这样,标签属性就会包含设置为true以及延迟值或延迟方法的rtexprvalue定义。
文字表达式
文字表达式计算为表达式的文本值,属于字符串类型。表达式无需使用${}或#{}符号。
如果某个文字表达式包含${}或#{}语法本身的显式,则需要使用以下字符:
n 创建综合表达式:
${’${’}exprA}
#{’#{’}exprB}
值结果分别是${exprA}和#{exprB}。
n 使用转义符\$和\#:
\${exprA}
\#{exprB}
值结果与第一种方式一致。
文字表达式计算时,可以转换为其他类型。表格6-1列出了文字表达式可转换的类型以及返回结果。
表达式
期望类型
结果
Hi
String
Hi
true
Boolean
Boolean.TRUE
42
int
42
表6-2文字表达式
文字表达式可以是立即或延迟计算,并且可以是值表达式或者方法表达式。文字表达式什么时候计算取决于其在哪里使用。标签属性使用的文字表达式可以接受延迟表达式的值,当对值进行引用时,文字表达式的计算依赖于其它因素对生命周期的影响,例如表达式用在哪里或者它引用的内容是什么。
方法表达式这种情况下,方法本身会被调用并返回某个特定的字符串文字。例如,应用程序guessnumber的h:commandButton标签使用文字型的方法表达式作为逻辑输出来告诉JSF导航系统当前页面的下个页面是什么。
运算符
EL提供了以下运算符,这些运算符只能用于右值表达式:
n 算数运算符:+,-(二进制),*,/和div,%和mod,-(普通一元)
n 逻辑运算符:and,&&,or,||,not,!
n 关系运算符:==,eq,!=,ne,<,lt,>,gt,<=,ge,>=,le。值的比较可以针对布尔、字符串、整型和浮点型等等。
n 空运算符:空运算符可以用在需要进行空运算的操作前面。null或者空值。
n 条件运算符:A?B:C。A的值取B或者C,取决于A运算的结果。
运算符的优先级遵从从高到低,从左到右的原则:
n [] .
n ()(用于改变运算符的优先级)
n -(一元) not ! empty
n * / div % mod
n + -(二进制)
n < > <= >= lt gt le ge
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23837-4.html
都是高手啊
具有领海和专属经济区
中国也俱战