JSF表达式语言– JSF EL
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; } }