n 使用单表达式结构:
这些表达式会被计算,并被转换为属性对应的类型。
n 使用与文字组合的多个表达式
这些表达式称为综合表达式,从左到右依次计算得出结果。每一个嵌入综合表达式的表达式值会被转换为字符串并与中间的文本连接在一起。而结果字符串则被转换为属性对应的类型。
n 只使用文本
这种表达式称为文本表达式。这种情况,属性的字符串文本值被转换为属性对应的类型。文本值表达式具有特殊的语法规则.如果标签属性是枚举类型,表达式属性必须使用文本表达式。例如,标签属性可以使用表达式”hearts”来代表Suit.hearts。文本转换为Suit类型,属性获取值Suit.hearts。
所有表达式都需要设置符合类型的属性值。如果表达式计算的结果与类型无法匹配,那么将对类型进行转换。例如,表达式${1.2E4}对浮点型的属性值最终将做如下转换:
Float.valueOf('1.2E4').floatValue()
参考“JSP2.1表达式语言”()1.18节中完整的类型转换规则。
方法表达式
EL另外一个功能是支持延迟的方法表达式。方法表达式用于调用Bean的任意公共方法,并返回结果。
在JSF技术中,组件标签代表页面的一个组件。组件标签使用方法表达式来调用组件中可以执行某些操作的方法。在组件生成和验证数据时需要这些方法来处理事件。如下例:
h:inputText标签显示为文本框。这个标签的validator属性引用了Beancustomer中名字叫做validateName的方法。
由于在程序生命周期的不同阶段方法都可以被调用,因此方法表达式必须使用延迟计算表达式。
左值表达式和方法表达式都可以使用.和[]符号。例如#{object.method}与#{object[“method”]}等价。[]中的文本被转换为字符串并用于查找方法名字与之匹配。找到方法后就会调用它,并将返回方法对应的信息。
方法表达式只能被用于标签属性中,并且只有一下两种方式:
n 使用单表达式结构, bean代表JavaBean组件,method代表JavaBean组件的一个方法:
在标签处理中,这个表达式以方法表达式的方式计算。方法表达式代表的方法将会被调用。
n 只使用文本
方法表达式支持文本主要是为了支持JSF技术中的action属性。当方法表达式引用的方法被调用,这个方返回一个标签库中对应类型的String文本(或者是JSF导航配置中的文本标示)。
参数化方法调用
EL支持参数化方法调用。可以使用参数进行方法调用,而无须使用静态EL函数。el表达式
.和[]操作符可以用于触发带参数的方法调用,如下表达式语法:
n expr-a[expr-b](parameters)
n expr-a.identifier-b(parameters)
在第一个表达式语法中,expr-a代表Bean对象。表达式expr-b首先被计算,然后转换为字符串用于代表前面Bean对象expr-a中的方法名。第二个表达式语法中,expr-a也是代表Bean对象,identifier-b代表Bean对象的方法名。这两个语法中的parameters代表方法调用的参数,参数可以是零、多值、表达式等(参数值之间以逗号分隔)。
两种值表达式和方法表达式都支持参数。下面这个例子是应用程序guessnumber的标签,方法调用随机数作为参数,而非用户输入的数据:
上面这个例子使用的是值表达式。
思考下面这个JSF组件标签使用方法表达式的例子:
EL表达式使用.buy调用Bean中的buy方法。可以将这个方法改为含参数,如下例:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23837-3.html
人家的粉丝都接受