Posted on: 2013-11-23, Last modified: 2013-11-23, View: 3480
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
- ? :
关键字
下面列出了JSF EL的关键字,你不能用这些关键字作为bean的名字或者属性:
and false le not
div ge lt Null
empty gt mod or
eq instanceof ne true
JSF笔记 – JSF中的EL表达式语言支持
1、EL表达式语言:
JSF中的表达式语言形如:#{login.username }
2、JSF中的表达式语言与JSP2中的表达式语言的不同:
JSF使用#开始,JSP使用$开始。
JSP只是访问并输出变量和Bean的值,JSF可以访问输出托管Bean的属性,还可以更新托管Bean的属性。
JSF不支持内嵌函数
JSF与JSP中的内置对象有点不同。
3、JSF表达式语言的常用写法:
#{loginBean.username } #{loginBean['username'] } #{loginBean[username] } #{loginBean[#{username}] } #{UserList[1] } #{loginBean[user.username] } #{loginBean['username'].name } #{loginBean['username'].list[1] } #{loginBean.username == 'arthinking' } #{(loginBean.username == 'arthinking')?'相等':'不相等' }
4、JSF的EL表达式支持的运算符:
. [] () ?: + - * / % == != > < >= <= && || ! empty
5、JSF EL提供的11个内置对象:
applicationScope cookie facesContext header initParam param paramValues requestScope sessionScope view