JavaServer Faces 表达式语言(JSF EL)
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

 

From: http://blog.csdn.net/pfyuit/article/details/8012377
Go
Friend Links:
Sonft