?
?
o
?
?
o
1.7.2 A { o
o
若 A 或B 属于 BigDecemial类型,他们都会强制转化成Bi
gDecemial类型,然后: ?
(B)
?
(B) o
若 A 或 B 属于 Float 或 Double 都强制成为Do
uble类型并且申请操作符 o
后: ?
(B)
若操作符为 == 或者 eq , 返回 A.equals
若 A 或 B 属于 BigInteger,都强制成BigInteger类型,然
若操作符为 != 或者 eq , 返回 !A.equals若操作符为 == 或者 eq , 返回 A.equals
否则,报错误
否则利用B.compareTo(A)结果 若B.compareTo(A)抛出异常,错误。
若B属于Comparable类型,那么:
否则利用A.compareTo(B)结果 若A.compareTo(B)抛出异常,错误。
== ,!=, eq , ne } B
若 A == B,申请操作
?
(B) o
若操作符为 != 或者 eq , 返回 !A.equals
若 A 或 B 属于 Byte,Short,Character,Integer,
或者Long等类型都强制成为Long类型并且申请操作符。
o
号。 o
o
?
若 A 或 B 属于 Boolean,都强制成Boolean,并且申请符
若 A 或 B 属于 enum,都强制成enum,并且申请符号。
若 A 或 B 属于字符型强制成String类型,比较字符:
否则,如果当调用A.equals(B)产生错误,则报错误。
?
否则,申请符号,并且使用A.equals(B)的结果
1.8.逻辑操作符
逻辑操作符有: && 和 and || 和 or ! 和 not
计算逻辑操作符的说明在下面章节中:
1.8.1 二元操作符- A {&& , ||,and,or} B
A 和 B强制成Boolean,申请符号
操作符停止计算,能够由表达式来决定,比如:Aand B and C and C 如果B等于false,然后只有 A和 B 计算。
1.8.2 一元操作符{! ,not } A:
A强制成Boolean,申请操作符
1.9 空值操作符-empty A
空值操作符是一种前缀操作符,他被使用决定于一个值是否空或者null。 计算空值 A: ?
若 A 等于 null,返回true ?
否则如果 A 是空String,返回 true
? 否则如果 A 是空array,返回 true
? 否则如果 A 是空Map,返回 true
? 否则如果 A 是空Collection,返回 true
? 否则返回 false
1.10.条件操作符A ? B: C
计算 B或 C,结果依赖于A的计算 强制成Boolean:
若 A等于 true,计算结果为B 若 A等于 false,计算结果为C
1.11.括号操作符
括号操作符能够改变计算的优先级,比如:${a*(b+c)}(先计算b+c)
1.12.操作符优先级
[] . ()
- not ! empty (一元操作符) * / div % mod + - (二元操作符) < > <= >= lt gtle ge == != eq ne && and || or ? :
带有参数合理的函数拥有的优先级超过符号的优先级。因此,表达式${c?b:f()},是一个非法的,因为b:f()被解析成一个合理的函数而不是作为一个条件表达式。通常,()操作符能被用作确定优先级,比如:${c? b :(f()) }
1.13.保留字:
下列的语言保留字不能由做法标识符:
and eq gt true instanceof or ne le false empty
not lt ge null div mod
注:这些中的很多保留字没有用到语言中,但是他们可能会在未来中使用,所以开发人员必须避免使用这些(保留)字
1.14.函数:
EL有些限定的函数,重用XML命名空间(和属性)限定,XSL函数,和JSP自定义动作等概念。函数都映射到publicstatic 方法在Java类中。
限定n个数组函数完全语法: [ns:]f([a1[,a2[,...[,an]]]])
ns是命名空间的前缀,f是函数的名字,a是函数的参数。
EL函数被映射,解析和绑定在解析的时候。它是由FunctionMapper类负责提供映射命名空间限定函数,这个函数使用有特殊的类的static方法在表达式创造。若没有FunctionMapper类被提供,函数会失效。
1.15.变量:
就像FunctionMapper为EL表达式中添加函数那样提供一种灵活的机制,VariableMapper为支持EL变量的概念提供一种灵活的机制。一个EL变量不是直接引用一个模型变量而能够通过ELResolver类被解析出来之后引用,而不是EL变量引用一个EL表达式。EL表达式的计算产生关联一个EL表达式数值。
EL变量被映射,解析和绑定在解析的时候。它是由VariableMapper类负责提供EL变量映射到ValueExpressions当表达式创建时。若没有VariableMapper类被提供,函数会失效。 参看 javax.el包中的描述更多细节。
1.16.枚举:
统一EL支持JavaSE5中的枚举类型。强制规则包括处理枚举类型在下面的章节中。同时,引用在EL表达式中枚举类型实例化对象的值,通过下面的强制转化规则使用字面值字符串去强制执行。比如,我们说,我们有一个枚举类型叫做Suit,它有成员Heart,Diamond,Club,和Spade。并且,我们说,我们有一个引用在EL表达式中,mySuit,就是Spade。如果你想要去测试枚举Spade相等性,你能说${mySuit== Enum.valueOf(Suit.class,'Spade')。
1.17.类型转换:
每个表达式被计算在预料类型的上下文中。表达式计算结果可能不会精确地匹配预料的类型,所以应用规则描述在下面章节。 1.17.1强制?
X值转化成类型Y:
若X是原始(原生)类型,那么让X等于X的包装类型。否则,让X不变。
? 若Y是原始(原生)类型,那么让Y等于Y的包装类型。否则,让Y不变。
? 应用下面的章节中强制转化X成Y。
?
错。
若Y是原始(原生)类型,那么结果被拆包强制结果找到。若强制结果是null,那么报
?
若Y不是原始(原生)类型,结果就是强制结果。
比如;如果强制int类型成String类型,那么包装int类型成Integer类型并且利用这个规则强制Integer类型成String类型。或者如果强制String成一个Double,应用规则强制String类型成Double类型,确定结果Double不是null。
1.7.2强制A成String类型
o
o
o
o
o
如果A是String类型,则返回A
否则,若A等于null,则返回\
否则,若A是枚举类型,则返回A.name()
否则,若A.toString()抛出throws一个异常,错误
否则,返回A.toString()
1.7.3强制A成Number类型N
?
?
若A属于Character类型,转化A成new Short((short)a.c
harValue()),并且应用以下规则。 ?
?
?
?
?
?
?
?
若A属于BigDecimal类型,返回new
BigDecimal (A) ?
doubleValue())
否则,返回new BigDecimal(A.
若N属于BigDecimal类型,
否则,返回BigInteger.valueOf(A.longValue()) 若A是一个BigDecimal,则返回A.toBigInteger()
若N属于BigInteger类型,
若A属于Numner类型,安静地强制成Number类型利用下面的算法: 若A属于Numner类型,则直接返回A 若A属于Boolean类型,则报错
若A等于null或 \,返回0.