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}摄氏度。" />此例子会显示一个城市名及当前的华氏温度和摄氏温度。