JSF中我们使用各种标签(Tag)来使用内建的或者自定义的组件,比如常用的h:outputText之类,你可以在faces-config.xml等配置文件中声明受管的JavaBean(Managed bean)。而JSF EL允许我们将Managed Bean的值绑定到组件的属性。
JSF EL和JSTL比较类似,但是它所用的是另外的函数和关键字,与JSTL使用${和}作为分隔符不同,JSF EL使用#{和}作为分隔符。
下面是一些有效的JSF EL的例子:
#{Page1.name}
#{Foo.bar}
#{Foo[bar]}
#{Foo[“bar”]}
#{Foo[3]}
#{Foo[3].bar}
#{Foo.bar[3]}
#{Customer.status == ‘VIP’}
#{(Page1.City.farenheitTemp - 32) * 5 / 9}
时间:从 #{Report.fromDate} 到 #{Report.toDate}
如果需要设置值(也就是向服务器提交值)那么只能用以下这些形式:
用.分隔的表达式:#{expr-a.value-b}
用[]分隔的表达式:#{expr-a[value-b]]
只包含bean名字的表达式:#{value-b}
在JSF EL中,#{a.b}和{a[b]}的作用是相同的。这里的b不一定非得是JavaBean的一个属性,如果a是一个Map,那么#{a.b}的值相当于a.get("b")。如果a是一个List或者数组,那么b可以是一个数组的下标。
值得注意的是,在JavaBean中定义布尔型的get方法时候通常定义为isXXX()这样的签名,JSF EL是没有办法识别这样的getter的,你仍然需要定义一个getXXX()方法(返回值为boolean类型),这样JSF EL才能正确的得到对应的属性值
隐式对象
在JSF EL中可以使用这些隐式对象:
facesContext - 当前请求的 FacesContext 实例。
param - 相当于request.getParameter
paramValues - 相当于request.getParameterValues
header - 相当于request.getHeader
headerValues - 相当于request.getHeaders
cookie - 相当于request.getCookies
initParam - 相当于config.getInitParameters
下面这些变量允许你访问各种不同scope中储存的变量:
requestScope - 将request scope的变量名称映射到它们的值中。
sessionScope - 将session scope的变量名称映射到它们的值中。
applicationScope - 将application scope的变量名称映射到它们的值中。
举例来说,在JSP中,你可以这样写:
<%= request.getParameter("paramName") %>
在JSF中,你可能是这样写:
<h:outputText value="#{param.paramName}" />
或者
<h:outputText value="#{param['paramName']}" />
数据类型
在JSF EL中有这些数据类型:
布尔型:true或者false
字符串型:使用单引号'或者双引号"进行分隔。格式类似java的String,可以使用\进行分隔。比如\"代表一个双引号。
浮点型:和Java一样
整型:和Java一样
空:null
运算符
JSF EL中有这些运算符:
算术运算符: +、 -(二元)、 *、 /、 div、 %、 mod、 -(一元)
逻辑运算符: and、 &&、 or、 ||、 not、 !
关系运算符: ==、 eq、 !=、 ne、 <、 lt、 >、 gt、 <=、 ge、 >=、 le。可以与其他值、或布尔型、字符串型、整型或浮点型相比较。
空运算符: empty 运算符是可以用来确定值是否为 null 或空的前缀运算。
条件运算符: A ?B : C。计算 B 或 C,具体情况取决于 A 的计算结果。
运算符有不同的优先级。按从高到低,从左到右的顺序排列的运算符优先级如下所示:
[] .
() (更改运算符的优先级)
-(一元) not ! empty
* / div % mod
+ -(二元)
< > <= >= lt gt le ge
== != eq ne
&& and
|| or
? :
下面列出了一些运算符使用的例子:
运算式 | 结果 |
#{1} | 1 |
#{1 + 2} | 3 |
#{1.2 + 2.3} | 3.5 |
#{1.2E4 + 1.4} | 12001.4 |
#{-4 - 2} | -6 |
#{21 * 2} | 42 |
#{3/4} | 0.75 |
#{3 div 4} | 0.75,除法 |
#{3/0} | Infinity |
#{10%4} | 2 |
#{10 mod 4} | 2,也是余除 |
#{(1==2) ? 3 : 4} | 4 |
#{true and false} | false |
#{true or false} | true |
#{not true} | false |
#{1 < 2} | true |
#{1 lt 2} | true |
#{1 > (4/2)} | false |
#{1 > (4/2)} | false |
#{4.0 >= 3} | true |
#{4.0 ge 3} | true |
#{4 <= 3} | false |
#{4 le 3} | false |
#{100.0 == 100} | true |
#{100.0 eq 100} | true |
#{(10*10) != 100} | false |
#{(10*10) ne 100} | false |
关键字
下面列出了JSF EL的关键字,你不能用这些关键字作为bean的名字或者属性:
and | false | le | not |
div | ge | lt | Null |
empty | gt | mod | or |
eq | instanceof | ne | true |