|
JSF Expression Language 搭配 JSF 标签来使用,是用来存取数据对象的一个简易语言。 JSF EL是以#开始,将变量或运算式放置在 { 与 } 之间,例如: #{someBeanName}
变量名称可以是faces-config.xml中定义的名称,如果是Bean的话,可以透过使用 '.' 运算符来存取它的属性,例如: ...
<f:view> <h:outputText value="#{userBean.name}"/> </f:view> ... 在JSF标签的属性上," 与 " (或'与')之间如果含有EL,则会加以运算,您也可以这么使用它: ...
<f:view> 名称, 年龄:<h:outputText value="#{userBean.name}, #{userBean.age}"/> </f:view> ... 一个执行的结果可能是这样显示的: 名称, 年龄:Justin, 29
EL的变量名也可以程序执行过程中所声明的名称,或是JSF EL默认的隐含对象,例如下面的程序使用param隐含对象来取得使用者输入的参数: <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> <%@page contentType="text/html; charset=Big5"%> <html> <head> <title></title> </head> <body> <f:view> <b> 您好, <h:outputText value="#{param.name}"/> </b> </f:view> </body> </html> param是JSF EL默认的隐含对象变量,它代表request所有参数的集合,实际是一个java.util.Map类型对象,JSF所提供的隐含对象,大致上对应于 JSP 隐含对象,不过JSF隐含对象移除了pageScope与pageContext,而增加了facesContext与view,它们分别对应于 javax.faces.context.FacesContext与javax.faces.component.UIViewRoot。 对于Map类型对象,我们可以使用 '.' 运算符指定key值来取出对应的value,也可以使用 [ 与 ] 来指定,例如: ...
<f:view> <b> 您好, <h:outputText value="#{param['name']}"/> </b> </f:view> ... 在 [ 与 ] 之间,也可以放置其它的变量值,例如: ...
<f:view> <h:outputText value="#{someBean.someMap[user.name]}"/> </f:view> ... 如果变量是List类型或数组的话,则可以在 [] 中指定索引,例如: ....
<f:view> <h:outputText value="#{someBean.someList[0]}"/> <h:outputText value="#{someBean.someArray[1]}"/> <h:outputText value="#{someBean.someListOrArray[user.age]}"/> </f:view> .... 您也可以指定字面常量,对于true、false、字符串、数字,JSF EL会尝试进行转换,例如: ....
<h:outputText value="#{true}"/> .... <h:outputText value="#{'This is a test'}"/> .... 如果要输出字符串,必须以单引号 ' 或双参数 " 括住,如此才不会被认为是变量名称。 在声明变量名称时,要留意不可与JSF的保留字或关键字同名,例如不可取以下这些名称: true false null div mod and or not eq ne lt gt le ge instanceof empty
使用EL,您可以直接实行一些算术运算、逻辑运算与关系运算,其使用就如同在一般常见的程序语言中之运算。 算术运算符有:加法 (+), 减法 (-), 乘法 (*), 除法 (/ or div) 与余除 (% or mod) 。下面是算术运算的一些例子:
如同在Java语法一样 ( expression ? result1 : result2)是个三元运算,expression为true显示result1,false显示result2。 逻辑运算有:and(或&&)、or(或!!)、not(或!)。一些例子为:
关系运算有:小于Less-than (< or lt)、大于Greater-than (> or gt)、小于或等于Less-than-or-equal (<= or le)、大于或等于Greater-than-or-equal (>= or ge)、等于Equal (== or eq)、不等于Not Equal (!= or ne),由英文名称可以得到lt、gt等运算符之缩写词,以下是Tomcat的一些例子:
左边是运算符的使用方式,右边的是运算结果,关系运算也可以用来比较字节或字符串,按字典顺序来决定比较结果,例如:
EL运算符的执行优先顺序与Java运算符对应,如果有疑虑的话,也可以使用括号()来自行决定先后顺序。 |