EL API提供一个一般化机制,解析器,通过底层技术实现并且定义了规则,它管理模型对象名称的解析和他们关联属性。
1.5. 操作符[]和 .
EL遵照的ECMAScript来统一处理.和 [] 操作符
expr-a.identifier-b 等于expr-a[\验证器 identifier-b被用于构造一个字面的值作为一个验证器。
计算expr-a[expr-b]:
?
计算expr-a的值放到value-a。
?
若vaule-a等于null:
如果expr-a[expr-b]作为末尾的一个属性被解析:
若表达式一个值表达式并且ValueExpression.getValue(context)被调用 ,作为初始化表达式计算,返回null。
否则,抛出PropertyNotFoundException的异常.(尝试着去分离引用null 作为左值) 否则,返回null ?
计算expr-b的值放到value-b
若value-b等于null; o
?
若表达式是一个取值表达式并且ValueExpression.getValue
(context)方法被调用去初始化表达式的计算,返回null。 ?
?
否则返回一个null
否则,抛出一个PropertyNotFoundException.
如果expr-a[expr-b]作为末尾的一个属性被解析:
?
?
若表达式是一个取值表达式:
?
?
若ValueExpression.getValue(context)方法被调用去初始化表达
式的计算,则调用elResolver.getValue(context.value-a,value-b)方法。 ?
若ValueExpression.getType(context)方法被调用,调用elResolv
er.getType(context,value-a,value-b)方法。 ?
若ValueExpression.isReadOnly(context)方法被调用,则调用el
Resolver.isReadOnly(context,value-a,value-b)方法。 ?
若ValueExpression.setValue(context,val)被调用,则调用elResol
ver.setValue(context,value-a,value-b,val)方法。 ?
否则,调用elResolver.getValue(value-a,value-b)。 如果expr-a[expr-b]作为末尾的一个属性被解析:
? 否则,表达式则是一个方法表达式: o
?
?
在解析时,寻找对象vaule-a上的value-b方法和提供预想的方法参数类
型集合。如果不存在这些,或者返回的类型不能匹配预想的回返类型(即方法签名不同),则抛出一MethodNotFoundException。 ?
若MethodExpression.invoke(context,params)被调用,则通过传递过来参
数来调用相应的方法。 ?
若MethidExpression.getMethodInfo(context)被调用,构建和返回一个Me
thodInfo对象。 o
否则,调用elResolver.getValue(value-a,value-b)。
强制value-b转化成String。
若expr-a[expr-b]作为末尾的一个属性被解析:
1.6算术操作符号:
算术操作只被在Integer(BigInteger和Long)类型和浮点(BigDecimal和双精度型)值.有五个操作符: 加法:+ 减法:- 乘法:* 除法:/and div 求余:%and mod
算术操作符的计算在下面的章节中描述。A和B作为计算的字表达式。 1.6.1 ?
二元操作符- A {+ ,-,*} B
若 A 和 B 都是null,则返回(Long)0
?
若 A 或 B 属于BigDecimal类型,或者都是,那么: o
o
o
?
若 A 或 B 属于 Float, Double,或者包含 String,e或则E, o
用操作符 o
?
若 A 或 B 属于 BigInteger类型,强制他们成为BigInteger类型,然后: o
o
o
若操作符为*,返回a.multiply(b) 若操作符为-,返回a.subtract(b) 若操作符为+,返回a.add(b)
否则,A和B强制成Double类型并且申请操作符
若A或B属于BigInteger类型,把A和B强制转化成BigDecimal类型并且应若操作符为*,返回a.multiply(b) 若操作符为-,返回a.subtract(b) 若操作符为+,返回a.add(b)
?
否侧,把A和B强制成Integer,并且应用符操作符。 ?
若操作符产生异常,那么报错误。
1.6.2 二元操作符- A {/,div} B
?
若 A 和 B 都是null,则返回(Long)0 ?
若A 或 B 一个属于BigDecimal或 一个属于BigInteger,都强制成BigDecimal并且返回A.divde(B,BigDecimal.ROUND_HALF_UP)。 ?
否则,A和B都强制成为Double类型并且申请操作符 ? 1.6.3 ?
若操作符产生异常,那么报错误。
二元操作符- A {% ,mod} B
若 A 和 B 都是null,则返回(Long)0
?
若 A 或 B 属于 Float, Double,或者包含 String。e或则E,都强制成Double并且申请操作符。 ?
若 A 或 B 属于 BigInteger类型,都强制成BigInteger返回A.remainer(B)。 ?
否则强制成Long并且申请操作符。 ? 1.6.4 ?
若操作符产生异常,那么报错误。
一元操作符 -A
若 A 是null,则返回(Long)0
?
若 A 属于 BigDecimal类型或则 BigInteger类型,或则A.negate()。 ?
若 A 是String类型: o
o
o
操作符产生异常,那么报错误。 否则强制成Long类型并申请操作符
若A 含有e或E,强制成Double类型并申请操作符
? 若 A属于 Byte,Short,Integer,Long,Float,Double o
o
若操作符产生异常,那么报错误。 保留原类型,并且申请操作符
? 否则,报错误
1.7 关系操作符
== 和 eq != 和 ne < 和 lt > 和 gt <= 和 le <= 和 ge
后面四种第二的版本符号提供使用是为了避免在XML语法中中使用实体引用和含有相同的行为,比如<行为 与 lt一样,以此类推。 1.7.1 o
e。 o
o
若 A 或B 属于 BigDecemial类型,他们都会强制
转化成BigDecemial类型,并且使用A.compareTo(B)方法的返回值作为返回值。 o
若 A 或 B 属于 Float 或 Double 都强制成为Do
uble类型并且申请操作符 o
若 A 或 B 属于 BigInteger,都强制成BigInteger
类型并且使用A.compareTo(B)方法的返回值作为返回值。 o
若 A 或 B 属于 Byte,Short,Character,Integer,
或者Long等类型都强制成为Long类型并且申请操作符。 o
o
若A属于Comparable类型,那么:
若 A 或 B 属于字符型强制成String类型,比较字符: 若 A 或 B 是 null,return false
A { <, > <= , >= , lt , gt , le , ge } B
若 A == B , 若 <= , le , >= 或者 ge 返回 tru
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库EL表达式语法(2)在线全文阅读。
相关推荐: