14.2. 表达式操作符

EL规范中定义了丰富的操作符来支持全范围的逻辑和数值操作。这些操作符可以分为6个大类:访问、算术、关系、逻辑、条件、空值。下表显示了这些操作符。

表 14.1. EL操作符

分类操作符说明举例
访问.访问bean属性、方法或者Map条目#{userBean.age}表示userBean的age属性。#{userBean.name.firstName}表示userBean的name属性的firstName属性
[]访问数组、List元素或者Map条目#{myBean['value']}表示myBean的value属性。#{myArrayList[5]}表示myArrayList的第5个元素。#{myMap['foo']}表示myMap中key='foo'的对象
算术+加法运算#{1980+userBean.age}如果#{userBean.age}为29的话,此表达式值为2009
-减法运算#{2009-userBean.age}如果#{userBean.age}为29的话,此表达式值为1980。
*乘法运算#{3*2}值为6,#{goods.price*0.8}表示goods商品打8析后的价钱
/除法运算#{4/2}值为2,#{goods.nowPrice/0.8}表示goods商品打8析前的价钱
%模(求余)运算#{ind%2},如果ind为正奇数,此表达式值为1;如果ind为偶数,此表达式值为0(此式常用在w:forEach或w:dataView构件内部)
关系==等于(对对象,使用equals()方法)#{userBean.sex=='男'}此式返回true或false
!=不等于#{userBean.sex!='男'}此式返回true或false
<小于#{userBean.age<60}此式返回true或false
>大于#{userBean.age>60}此式返回true或false
<=小于或等于#{userBean.age<=60}此式返回true或false
>=大于或等于#{userBean.age>=60}此式返回true或false
逻辑&&逻辑AND#{userBean.age>20 && userBean.sex=='男'}如果age大于20且sex是'男'则返回true,否则返回false
||逻辑OR#{userBean.age<20 || userBean.age>60}如果age小于20或大于60则返回true,否则返回false
!逻辑NOT#{!(userBean.sex=='男')}如果sex是男则返回false,否则返回true
条件?:条件表达式: ifCondition ? trueValue : falseValue#{p.flag==true?'是':'否'}如果flag是true则值为'是',否则值为'否'(此式经常用于格式化输出,后台是true/false,页面上显示成'是'/'否')
空值empty测试空值(null、空字符串、数组、Map或者没有值的Collection)#{empty A}如果A是null或空字符串、数组、Map或者没有值的Collection则返回true,否则返回false

下面是几个复杂的例子:

<h:outputText rendered="#{user.isVIP && goods.price>100 && goods.type!='电器'}" 
           value="折扣前价格为:#{goods.price},折扣比例为:#{goods.discount},最终价格为:#{goods.price*goods.discount}" />

此例子在一个会员用户购买价格大于100元的非电器类商品时,会显示出该商品的折扣前价格、折扣比例及折扣后价格。

<h:outputText value="#{cityBean.selectedCity.name}的温度是:
           #{cityBean.selectedCity.faTemp}华氏度,#{(cityBean.selectedCity.faTemp-32)*5/9}摄氏度。" />

此例子会显示一个城市名及当前的华氏温度和摄氏温度。