可以使用个性化的EL解析器来处理变量。举个例子,可以提供一个EL解析器来根据customer的name属性拦截对象,这样${customer}就会被EL解析器的返回值取代。
在表达式中可以使用字符串引用枚举常量。例如,考虑枚举类:
public enum Suit {hearts, spades, diamonds, clubs}
为了使用表达式引用Suit的Suit.hearts常量,可以使用字符串“hearts”。有了这个文本,字符串可以自动转换为枚举常量。例如,下面这个表达式,mySuit是Suit的实例,在“hearts”与mySuit实例比较之前,它首先被转换为Suit.hearts。
${mySuit == 'hearts'}
使用值表达式引用对象属性
要引用某个Bean或者某个枚举实例的属性、集合项或者隐式对象的属性,可以使用.或者[]符号。
引用customerBean的名字属性,既可以使用${customer.name}也可以使用${customer['name']}表达式。括号内字符串内容是要引用的属性名称。字符串内容既可以使用单引号也可以使用双引号。也可以结合符号[]和.来使用,如:
${customer.address['street']}
枚举常量的属性也可以这样引用。枚举类的属性必须符合JavaBean组件的规范,也就是说,至少要有一个get方法用来访问属性。
例如,思考一个枚举类,这个类封装了银河系行星的名字,并有一个方法用来获取行星的质量。那么就可以使用下面的表达式来引用枚举类Planet的getMass方法。
${myPlanet.mass}
如果要访问数组或者列表的项,那么必须使用可以转换为整型的文字值或者[]符号(里面放不带引号的整型数)。下面的例子代表列表或者数组的同一个项,假设socks可以转换为整型。
n ${customer.orders[1]}
n ${customer.orders.socks}
相比之下,Map的项却可以使用字符串文字访问,而不需要以上要求:
${customer.orders['socks']}
右值表达式也可以直接引用对象或非对象的值,例如算数运算的结果和文字值,例子如下:
n ${'literal'}
n ${customer.age + 20}
n ${true}
n ${57}
EL对以下文字有定义:
n Boolean:true和flase
n Integer:与Java一样
n Floating-point:与Java一样
n String:使用单引号或者双引号;\”转义为”,\’转义为 ’,\\转义为\
n Null:null
也可以对枚举常量编写表达式,例如,思考下面的枚举类:
public enum Suit {club, diamond, heart, spade}
定义好枚举常量mySuit后,可以通过以下表达式来测试mySuit对象的值是否是spade:
mySuit.valueOf(Suit.class, 'spade'}
值表达式的使用范围
使用${}分隔符的值表达式可以用在:
n 静态文本
n 任何可以接受的标准的或是自定义的标签属性表达式
静态文本的值表达式会被当前的输出计算并取代。这里是一个嵌入在静态文本中值表达式的例子:
some text ${expr} some text
如果静态文本出现在标签体中,注意如果标签体被定义为标签依赖,那么表达式将不会被计算。
左值表达式只能用在能接受左值表达式的标签属性中。
使用右值或者左值表达式的标签属性值可以通过以下方式设置:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23837-2.html
农民才55元能做什么
他们了解世界更了解我们大陆
让侵略者知道中国人不是懦夫
你是美国佬的私生子吗