zoukankan      html  css  js  c++  java
  • 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运算子对应,如果有疑虑的话,也可以使用括号()来自行决定先后顺序。

  • 相关阅读:
    Populating Next Right Pointers in Each Node II
    Populating Next Right Pointers in Each Node
    Construct Binary Tree from Preorder and Inorder Traversal
    Construct Binary Tree from Inorder and Postorder Traversal
    Path Sum
    Symmetric Tree
    Solve Tree Problems Recursively
    632. Smallest Range(priority_queue)
    609. Find Duplicate File in System
    poj3159最短路spfa+邻接表
  • 原文地址:https://www.cnblogs.com/wenjl520/p/1631504.html
Copyright © 2011-2022 走看看