JSF复习系列(1)--EL表达式

时间:2022-08-04 19:04:17

一、前言

  最近在写一个小东西,发现好多问题都出在JSF上,故决定趁着暑假好好研究一下JSF,尽管已经学JSF快一年了,现在还要回头来学习JSF,有点打脸的感觉,且不顾这些了,好好学。

二、EL表达式

2.1 EL是什么

  EL:Expression Language,为了更简单的获取或者更新(给后台bean赋值)后台bean的属性,而不必在再用复杂的Java来做这些工作而创造的EL表达式。
  EL的格式:

#{bean.property}

2.2 EL表达式的其他写法

#{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')?'相等':'不相等' }

2.3 EL的作用

  为了更简单的获取或者更新(给后台bean赋值)后台bean的属性,而不必在再用复杂的Java来做这些工作而创造的EL表达式。

2.4 EL的作用机制

  未知,待解决。

2.5 EL作用域

EL 存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。因为我们并没有指定哪一个范围的username,所以它的默认值会先从Page 范围找,假如找不到,再依序到RequestSessionApplication范围。假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null,当然EL表达式还会做出优化,页面上显示空白,而不是打印输出NULL。
  如下表:

属性范围(jstl名称) EL中的名称
Page PageScope
Request RequestScope
Session SessionScope
Application ApplicationScope

我们也可以指定要取出哪一个范围的变量:

范例 说明
${pageScope.username} 取出Page范围的username变量
${requestScope.username} 取出Request范围的username变量
${sessionScope.username} 取出Session范围的username变量
${applicationScope.username} 取出Application范围的username变量

其中,pageScope、requestScope、sessionScope和applicationScope都是EL 的隐含对象,由它们的名称可以很容易猜出它们所代表的意思,例如:${sessionScope.username}是取出Session范围的username 变量。

2.6 EL隐含对象

  EL有九个隐含对象。
  如下表:

隐含对象 类型 说明
PageContext javax.servlet.ServletContext 表示此JSP的PageContext
PageScope java.util.Map 取得Page范围的属性名称所对应的值
RequestScope java.util.Map 取得Request范围的属性名称所对应的值
sessionScope java.util.Map 取得Session范围的属性名称所对应的值
applicationScope java.util.Map 取得Application范围的属性名称所对应的值
param java.util.Map 如同ServletRequest.getParameter(String name)。回传String类型的值
paramValues java.util.Map 如同ServletRequest.getParameterValues(String name)。回传String[]类型的值
header java.util.Map 如同ServletRequest.getHeader(String name)。回传String类型的值
headerValues java.util.Map 如同ServletRequest.getHeaders(String name)。回传String[]类型的值
cookie java.util.Map 如同HttpServletRequest.getCookies()
initParam java.util.Map 如同ServletContext.getInitParameter(String name)。回传String类型的值

三、前台显示BackBean的属性

EL表达式
参数请求的生命周期
facesContext