• JSF Expression Language(EL表达式)


    JSF Expression Language

    JSF Expression Language 搭配 JSF 标签来使用,是用来存取数据对象的一个简易语言。

      JSF EL是以#开始,将变量或表达式放置在

    Unknown macro: { 与 }
    之间,例如:
    #{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) 。下面是算术运算的一些例子:

    表达式 结果
    #{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

      如同在Java语法一样 ( expression ? result1 : result2)是个三元运算,expression为true显示result1,false显示result2。

      逻辑运算有:and(或&&)、or(或!!)、not(或!)。一些例子为:

    表达式 结果
    #{true and false} false
    #{true or false} true
    #{not true} false

      关系运算有:小于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的一些例子:

    表达式 结果
    #{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

      左边是运算子的使用方式,右边的是运算结果,关系运算也可以用来比较字符或字符串,按字典顺序来决定比较结果,例如:

    表达式 结果
    #{'a' < 'b'} true
    #{'hip' > 'hit'} false
    #{'4' > 3} true

      EL运算子的执行优先级与Java运算子对应,如果有疑虑的话,也可以使用括号()来自行决定先后顺序。

  • 相关阅读:
    How to bind to data when the DataContext is not inherited【项目】
    访问ControlTemplate内部的元素
    TemplateBinding vs TemplatedParent【PluraSight】
    UserControl和CustomControl基础【PluraSight】
    如何让label和textblock分成两行
    Labeled ContentControl & LabeledControl【项目】
    Label & TextBlock
    How to use SourceGear DiffMerge in SourceSafe, TFS, and SVN【项目】
    转载 使用WiX Toolset创建.NET程序发布Bootstrapper(安装策略管理)(一&二)——初识WiX
    Unity中的C#规则
  • 原文地址:https://www.cnblogs.com/wenjl520/p/1631504.html
Copyright © 2020-2023  润新知