JSF表达式语言– JSF EL

时间:2020-02-23 14:33:43  来源:igfitidea点击:

JSF表达式语言使用户可以使用各种表达式从JavaBeans组件动态访问数据。

JSF表达语言

JSF表达式语言或者JSF EL支持以下类型的表达式。

  • 立即值表达式或者递延值表达式
  • 值表达式或者方法表达式
  • 右值或者左值表达式

JSF EL –立即值表达式

最初显示页面后,将立即评估立即表达式并呈现结果。
立即评估的语法是

${}

即时评估表达式可以在模板文本中使用,也可以用作接受运行时表达式的标签属性值。
这些类型的表达式是只读的。

JSF EL –延迟值表达式

在生命周期阶段,只要需要,便会评估延期表达式。
延迟评估的语法为

#{expression}

延迟值表达式可以有两种类型

  • 值表达
  • 方法表达式

JSF表达式语言–值表达式

值表达式通常获取值或者设置值。
这些表达式可以进一步分为右值和左值表达式。

左值表达式可以读取和写入数据,而右值表达式只能读取数据。

例如,如果我们想从托管bean中获取汽车的名称

${car.cname}:用于立即评估

#{car.cname}:用于延迟评估

立即计算${car.cname}用作右值表达式,而在某些情况下,在请求期间,该表达式可用于将值设置为cname字段,因此用作左值表达式。

JSF EL –使用值表达式引用对象

可以将值表达式称为托管bean组件,集合,枚举类型和隐式对象类型。

例如:${car}

此表达式引用名为" car"的托管Bean组件。
在评估此表达式时,容器在页面,请求或者会话中搜索car并返回值。
如果找不到汽车,则返回的值为null。

假设有一个名为carnames的列表包含以下值,

公开名单车名= {" Santro"," Zen"," Polo"," Innova"}}

假设如果要访问名为Polo的汽车,则使用表达式

${carnames [2]}

其中[2]表示列表中的第三个元素,其值为" Polo"

JSF EL –使用值表达式引用对象属性

要访问托管bean属性,集合中的元素或者隐式对象,我们使用。
或者[]表示法。

如果我们考虑一个要访问汽车托管bean的cname的示例,那么我们使用以下表达式

${car.cname}或者${car [" cname"]}

如果我们要访问数组或者集合中的元素,则使用

${car.carnames [3]}

其中car是托管bean,而carnames是我们要访问的第三个元素的列表。
假定可以将nval转换为int数据类型,则可以使用可以将其转换为int且不带引号的${car.carnames.nval}文字值。

为了从地图访问元素,应将引号指定为

${car.cnames [" nval"]}其中car是bean,cnames是地图。

EL支持Boolean,Integer,Floating,null和String数据类型。

JSF表达式语言–方法表达式

JSF EL方法表达式允许用户调用返回结果的bean的公共方法。
方法表达式对于验证数据组件和处理事件是必需的。

考虑在Bean中调用方法的示例

<h:commandButton id="sub" value="Add Details" action="#{car.add}"> </h:commandButtton>

其中单击"添加详细信息"按钮,我们将调用car bean的add方法。

方法表达式可以使用。
或者[]运算符为#{car.add}或者#{car [" add"]}。

JSF EL参数化方法

表达式语言支持带参数的方法。
值和方法表达式均支持参数。
考虑一个如何使用参数调用方法的示例。

<h:inputText id="speed" value="#{car.calculatespeed(‘70.2’)}"></h:inputText>

其中我们通过传递值为70.2的参数speed来调用bean car的computespeed方法。

现在,让我们看一个简单的示例,在该示例中,我们将看到JSF表达式语言的使用。

如下所示创建一个JSF页面car.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="https://www.w3.org/1999/xhtml"
	xmlns:h="https://xmlns.jcp.org/jsf/html">
<h:head>
	<title>Facelet Title</title>
</h:head>
<h:body>
      Car Name:#{car.cname}
      <br>
	<br>
    
      Color:#{car.color}
      <br>
	<br>
      
      Model Number:#{car.modelno}
      <br>
	<br>
      
      Speed:#{car.calculatespeed(45.20)}
     
  </h:body>
</html>

其中我们通过传递速度值45.20并获取cname,color和modelno属性的值来调用计算速度方法。

创建托管beanCar.java作为

package com.theitroad.jsf.beans;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class Car {

	private String cname = "Polo";
	private String color = "White";
	private String modelno = "P245";

	public Car() {
	}

	public Car(String cname, String color, String modelno) {
		this.cname = cname;
		this.color = color;
		this.modelno = modelno;
	}

	public String getCname() {
		return cname;
	}

	public void setCname(String cname) {
		this.cname = cname;
	}

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

	public String getModelno() {
		return modelno;
	}

	public void setModelno(String modelno) {
		this.modelno = modelno;
	}

	public float calculatespeed(float speed) {

		float totalspeed = speed + 10;
		return totalspeed;

	}

}