EL表达式

合集下载

el表达式写法

el表达式写法

el表达式写法
El表达式是一种用于模板引擎和视图中的动态表达式语言,用于在模板中嵌入动态数据。

以下是一些常见的El表达式的写法:
1. 访问属性:
- `${}`:访问对象`user`的`name`属性。

- `${user.address.city}`:访问嵌套属性。

2. 访问列表和映射:
- `${list[0]}`:访问列表`list`的第一个元素。

- `${map['key']}`:访问映射`map`中键为`key`的值。

3. 调用方法:
- `${user.getName()}`:调用对象`user`的`getName()`方法。

- `${utils.format(date)}`:调用静态方法`utils.format()`。

4. 条件判断:
- `${user.age > 18 ? '成年人' : '未成年人'}`:根据条件返回不同的值。

5. 迭代列表:
- `<c:forEach items="${users}" var="user">`:迭代列表`users`中的每个元素,用变量`user`引用每个元素。

6. 计算表达式:
- `${5 + 3}`:计算表达式的结果。

7. EL隐式对象:
- `${pageContext.request.contextPath}`:访问EL隐式对象中的属性,如访问请求的上下文路径。

这些只是El表达式的一小部分写法,实际使用中还有更多的写法和用法,可以根据需要进一步学习和掌握。

el表达式解析原理java

el表达式解析原理java

el表达式解析原理javaEL(Expression Language)表达式是一种用于在JSP和JavaEE应用程序中获取和操作数据的简单表达式语言。

它最初由JavaServer Pages规范定义,并在JSP 2.0中首次引入。

EL表达式提供了一种轻量级的方式来访问和操作JavaBean组件、集合和映射中的数据,而不需要编写复杂的Java代码。

在Java中解析EL表达式需要借助于EL表达式解析器。

在Java EE中,EL表达式解析器由Servlet容器负责创建和管理。

EL表达式的解析原理如下:1. 词法分析(Lexical Analysis):EL表达式的解析器首先将输入的EL表达式分解成一个个Token。

Token是词法分析的基本单元,代表一个特定的语法结构或数据类型。

比如,`'${'`、`'['`、`'('`、`'}'`、`']'`、`')'`、`.`、`'.'`、`','`等都可以作为Token。

2. 语法分析(Syntax Analysis):EL表达式的解析器根据Token序列构建抽象语法树(AST,Abstract Syntax Tree)。

语法分析器将Token按照语法规则进行组合,并创建AST节点。

例如,`${}`将被解析为一个AST节点,最终生成的AST如下所示:```. (property access)/ \person name```这个AST表示了一个属性访问,从`person`对象中获取`name`属性的值。

3. 语义分析(Semantic Analysis):EL表达式的解析器对AST进行语义分析,验证表达式的语义正确性。

它会检查使用的变量、函数是否存在,以及操作符是否支持操作数的数据类型等。

如果发现语义错误,解析器将抛出异常并中断解析过程。

EL语言表达式(一)【语法和特点】

EL语言表达式(一)【语法和特点】

EL语⾔表达式(⼀)【语法和特点】
⼀、基本语法规则:
EL表达式语⾔以“${”开头,以"}"结尾的程序段,具体格式如下:
${expression}
其中expression:表⽰要指定输出的内容和字符串以及EL运算符组成的表达式。

⼆、EL语⾔表达式的特点:
(1)EL语法简单,⽅便
(2)EL可以与JSTL结合使⽤,也可以和JavaScript语句结合使⽤。

(3)EL可以⾃动转换类型。

(4)EL既可以访问⼀般的变量,也可以访问JavaBean中的属性和嵌套属性、集合对象。

(5)EL中可以执⾏算术运算、逻辑运算、关系运算和条件运算等。

(6)EL中可以获得命名空间(PageContext对象,他是页⾯中所有其他内置对象的最⼤范围的集成对象,通过它可以访问其他内置对象)。

(7)EL中在进⾏除法运算时,如果除数是0,则返回⽆穷⼤Infinity,⽽不返回错误。

(8)EL中可以访问JSP的作⽤域(request、session、application以及page)
(9)扩展函数可以与Java类的静态⽅法进⾏映射。

三、EL中保留的关键字
and eq gt
instanceof div or
le false empty
not lt ge。

EL表达式

EL表达式

EL表达式总结EL表达式总是用大括号括起,而且前面有一个美元符($)前缀:${expression}。

表示式中第一个命名变量要么式一个隐式对象,要么是某个作用域(页面作用域、请求作用域、会话作用域或应用作用域)中的一个属性。

点号操作符允许你使用一个Map键或一个bean性质名来访问值,例如,使用${foo.bar}可以得到bar的值,在此,bar是Map foo的Map键名,或者是bean foo的一个性质。

放在点号操作符右边的东西必须遵循Java的标识符命名规则!(换句话说,必须以一个字母、下划线或美元符开头,第一个字符后面可以有数字,但不能有其他字符)。

点号右边只能放合法的Java标识符。

例如,${foo.1}键就不可以。

[]操作符比点号功能更强大,因为利用[]可以访问数组和List,可以把包含命名变量的表达式放在中括号里,而且可以做任意层次的嵌套,只要你受得了。

例如,如果musicList是一个ArrayList,可以用${musicList[0]}或${musicList[“0”]}来访问列表的第一个值。

EL并不关心列表索引加不加引号。

如果中括号里的内容没有用引号引起来,容器就会进行计算。

如果确实放在引号里,而且不是一个数组或List的索引,容器就会把它看作是性质或键的直接命名。

除了一个EL隐式对象(PageContext)外,其他EL隐式对象都是Map。

从这些隐式对象可以得到任意4个作用域中的属性、请求参数值、首部值、 cookie值和上下文初始化参数。

非映射的隐式对象是pageContext,它是PageContext对象的一个引用。

不要把隐式EL作用域对象(属性的Map)与属性所绑定的对象混为一谈。

换句话说,不要把requestScope隐式对象与具体的JSP隐式对象 request混淆。

访问请求对象只有一条路,这就是通过pageContext隐式对象来访问(不过,想从请求得到的一些东西通过其他EL隐式对象也可以得到,包括param/paramValues、header/headerValues和cookie)。

EL表达式与JSTL

EL表达式与JSTL

EL和JSTL主要内容✓EL表达式✓JSTL标签库1.EL表达式EL表达式又称为表达式语言(Expression Language),它是JSP中一个很重要的组成部分。

在JSP页面中使用EL表达式,可以简化对变量和对象的访问。

EL表达式的语法非常的简单,所有的EL表达式都是以“${”开始,以“}”结束,比如${name}。

EL表达式会将表达式中的结果在页面上输出,就像使用JSP的表达式结构或使用out内置对象进行输出一样。

EL表达式对运算符支持使用EL表达式进行算术运算,在EL表达式中支持+、-、*、/、%运算,示例如下:代码演示:EL表达式算术运算<%@ page language="java" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>EL表达式算术运算</title></head><body>12 + 15 = ${12+15}<br>12 * 15 = ${12*15}<br>12 - 15 = ${12-15}<br>12 / 15 = ${12/15}<br>12 % 15 = ${12%15}<br></body></html>图1 EL表达式算术运算结果在EL表达式中还可以支持关系运算符操作,示例如下:代码演示:EL表达式关系运算符<body>12==15 ${12==15}<br>12<15 ${12<15}<br>12>15 ${12>15}<br>12<=15 ${12<=15}<br>12>=15 ${12>=15}<br>12!=15 ${12!=15}</body>EL表达式除了支持普通的关系运算符外,还可以使用字符来表示关系运算符,下面的写法和上面使用普通关系运算符表示的顺序一一对应:代码演示:EL表达式关系运算符<body>12==15 ${12 eq 15}<br>12<15 ${12 lt 15}<br>12>15 ${12 gt 15}<br>12<=15 ${12 le 15}<br>12>=15 ${12 ge 15}<br>12!=15 ${12 ne 15}</body>图2 EL表达式关系运算符结果EL表达式中同样支持逻辑运算:代码演示:EL表达式逻辑运算<body>${12 < 15 && 12 < 15 }<br>${12 < 15 and 12 < 15 }<br>${12 < 15 || 12 > 15 }<br>${12 < 15 or 12 >15 }<br>${!(12 < 15) }<br>${not (12 < 15) }</body>从上面的代码中可以看出EL表达式中不仅支持&&、||、!方式的逻辑运算符,同样也支持and、or、not方式的逻辑运算符。

表达式语言(el)的语法格式

表达式语言(el)的语法格式

表达式语言(Expression Language)是一种用于在软件应用中进行数学计算和逻辑判断的特殊语言。

它通常用于在动态网页、模板、配置文件和其他与业务逻辑相关的场景中进行数据处理和计算。

EL的语法格式包括以下几个方面:1. 表达式结构:EL表达式通常由一系列的变量、运算符和函数组合而成,用于对数据进行操作和计算。

它的结构通常由一组操作数和运算符组成,比如 x + y 或者 func(x, y) 等形式。

2. 变量引用:在EL中,可以通过使用 ${} 符号来引用变量,变量的引用形式为 ${var},其中 var 为变量名。

这种形式的引用可以方便地将变量的值嵌入到文本中,或者作为计算表达式的一部分参与运算。

3. 字面量:除了引用变量,EL中还可以直接使用字面量,包括整数、浮点数、字符串等。

比如 123、3.14、"hello" 等都可以作为字面量直接出现在表达式中。

4. 运算符:EL支持多种常见的数学和逻辑运算符,包括加减乘除、取模、逻辑与或非等。

这些运算符可以用于对变量和字面量进行计算和逻辑判断,从而完成复杂的数据处理和逻辑控制。

5. 函数调用:除了基本的运算符,EL还支持函数的调用,这些函数可以是预定义的一些常用函数,也可以是用户自定义的函数。

通过函数调用,可以实现更复杂的数据处理和逻辑控制。

EL的语法格式简洁清晰,易于理解和使用。

它在软件开发中发挥着重要的作用,不仅可以用于动态网页的数据展示和计算,还可以用于配置文件的数据处理和逻辑判断。

了解和掌握EL的语法格式对于提高软件开发效率和质量都具有重要意义。

EL语言的语法格式设计简洁清晰,易于理解和使用,但在实际应用中,我们还需要更深入地了解其具体的语法规则和用法。

下面我们将对EL表达式的语法格式进行更详细的介绍,包括变量引用、字面量、运算符、函数调用等方面的内容。

1. 变量引用在EL语法中,变量引用是一种非常常见的操作。

el表达式判断是否包含某字符串的方法

el表达式判断是否包含某字符串的方法

EL(Expression Language)是一种用于在JSP、JSF等技术中简化表达式求值的语言。

在EL中,我们常常需要判断一个字符串是否包含另一个字符串。

在本文中,我将探讨el表达式中判断是否包含某字符串的方法,并从简单到复杂逐步展开这个主题,以便更好地理解。

1. EL表达式简介EL表达式是在JSP、JSF等技术中经常使用的一种表达式语言,用于在页面中访问和操作JavaBean的属性。

它的语法简洁明了,使用起来非常方便。

我们可以通过`${}`来获取JavaBean中的name属性值。

2. 判断字符串是否包含某字符串的方法在EL中,判断一个字符串是否包含另一个字符串,可以使用`${fn:contains(string1, string2)}`方法来实现。

其中,string1为要被检查的字符串,string2为要检查是否包含的字符串。

该方法会返回一个boolean类型的值,表示string1是否包含string2。

3. 实际应用举例举个例子,假设我们有一个字符串`${fruit}`,我们想判断它是否包含"apple"这个子串,可以这样写`${fn:contains(fruit, 'apple')}`。

如果fruit包含"apple",则该表达式的值为true,否则为false。

4. 注意事项在使用`${fn:contains}`方法时,需要确保传入的两个参数都是字符串类型。

如果其中有一个参数不是字符串类型,将会抛出错误。

另外,判断时是否区分大小写取决于具体的环境配置,需要注意这一点。

5. 个人观点和理解EL表达式中判断是否包含某字符串的方法非常简单且实用。

它可以在页面上轻松地实现字符串的包含关系判断,而不需要在后台Java代码中编写繁琐的判断逻辑。

当然,在实际应用中,我们也需要注意参数类型和大小写敏感性等细节,以确保程序的稳定性和可靠性。

EL表达式语法详细介绍

EL表达式语法详细介绍

1.1 EL表达式:EL表达式规定为:eval-expression和literal-expression,同时E L表达式支持Compositeexpressions,很多EL表达式(eval-ex pressions和literal-expressions)被聚合在一起。

EL表达式被解析成数值表达式和方法表达式。

其中,取值表达式去引用一个值,而方法表达式则是关联一个方法。

一旦被解析之后,表达式能够被优化地计算一次或多次。

下面我们来分为:eval-expression、literal-expression、Compo siteexpressions来讲述1.1.1Eval-expressionEval-expression是以使用${expr}或者#{expr}结构的形式构成。

两种方式都是相同的方式,能很好被解析和计算,尽管它们在使用时有着不同的意义从技术方面来说。

从J2EE层规范协定来说,${expr}结构是直接计算而#{expr}结构则是延期计算,这种界定符号指出了在J2EE层两种表达式类型的语义上面的区别。

#{expr}这种界定符号被称为延迟计算是因为直到系统需要的时候才计算。

而${expr}这种界定符号则是在JSP页面编译的时候就计算,就是为什么叫做直接计算的原因。

1.1.1.1作为取值表达式的计算表达式当解析成一个取值表达式的时候,eval-expression能被计算成左值和右值。

若在EL中有等号操作符号出现,右值是类型出现在等号的右边的表达式,左值同理。

右值比如:<input type="text"value="${}"/><h:form>以下面这个例子为例:<h:inputTextid="email"value="#{checkOutFormBean.email}"size="25"maxlength="125"validator="#{checkOutFormBean.validateEmail}"/></h:form>当表单被提交的时候,在申请计算的阶段,Faces计算EL表达式#{checkOutFormBean.validateEmail}作为一个数据接口的引用,这个数据结构的数值是被一个表单相关联的输入参数设置。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

EL:
简介:
(Expression Language.)
作用:EL表达式存取变量数据。

方便使用。

语法结构: ${ ……. }
EL运算符:
.与[]
EL提供了.和[] 两个运算符存取数据
假设session变量为user的javaBean,有一个name属性,取值为${} 或者${er[“name”]}
算术运算符
有五个:+、-、*或$、/或dive、%或mod
${2+3}
${2/3}或${2 div 3}
${2%3}或${2 mod 3}
关系运算符
有六个:==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge ${5==5} ${5 eq 5}
${5 != 5} ${5 ne 5}
逻辑运算符
有三个:&&或and、||或or、!或not
${A &&B} ${A and B}
${A || B}
${!A} ${not A}
其它运算符
有三个:Empty运算符、条件运算符、()运算符
${empty }
<body>
${3+9 }
${5==5 }
${empty a }
</body>
EL隐式对象:
1、与范围有关的隐式对象。

●pageScope使用范围:当前页面
●requestScope使用范围:当前请求
●sessionScope使用范围:当前会话
●applicationScope使用范围:服务器启动到结束
例子:
<body>
<%
pageContext.setAttribute("key","b");
request.setAttribute("key","c");
session.setAttribute("key","d");
application.setAttribute("key","e");
%>
${key }
${requestScope.key }
${sessionScope.key }
${applicationScope.key }
</body>
2、与输入有关的隐式对象。

●param:请求中传递的是单个值
●paramValues :请求中传递的是数组或多个值${ername }
可在url地址中用问号赋值然后获取。

注:
request.getParameter(String name)
request.getParameterValues(String name)
等同于:
${}
${}
实例一:
1、先建两个bean类:
Dept实体类:
public class Dept {
private int deptId;
private String deptName;
public int getDeptId() {
return deptId;
}
public void setDeptId(int deptId) { this.deptId = deptId;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) { this.deptName = deptName;
}
}
User实体类:
public class User {
private int id;
private String name;
private Dept dept;
public Dept getDept() {
return dept;
}
public void setDept(Dept dept) {
this.dept = dept;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
= name;
}
}
2、建个el.jsp:
<body>
<%
User u = new User();
u.setId(1);
u.setName("zhangsan");
Dept d = new Dept();
d.setDeptId(101);
d.setDeptName("计算机");
u.setDept(d);
request.setAttribute("user",u);
%>
${ }
${user.dept.deptName }
</body>
上面例子虽然能说明传值、取值,但不要那样写,尤其不能讲java代码写在jsp页面中!!实例二:
1、在index.jsp中:
<body>
首页<a href="showUser">显示用户</a>
</body>
2、还是用上面的两个bean类。

3、写dao层:UserDao (这里只是模拟从数据库查信息)
public class UserDao {
public User findUser(){
User u = new User();
u.setId(1);
u.setName("zhangsan");
Dept d = new Dept();
d.setDeptId(101);
d.setDeptName("计算机");
u.setDept(d);
return u;
}
}
4、建立一个servlet:
public class ShowUserServlet extends HttpServlet { public void destroy() {
}
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
UserDao dao = new UserDao();
User user = dao.findUser();
request.setAttribute("user", user);//显示页面用${user.id }等取值
RequestDispatcher rd =
request.getRequestDispatcher("showUser.jsp");
rd.forward(request, response);
}
public void init() throws ServletException {
}
}
5、写显示页面showUser.jsp:
<body>
<table border="1">
<tr><td>id</td><td>name</td><td>deptname</td></tr>
<tr><td>${user.id }</td><td>${ }</td><td>${us er.dept.deptName }</td></tr>
</table>
</body>。

相关文档
最新文档