java html页面可以使用el表达式吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java html页面可以使用el表达式吗相关的知识,希望对你有一定的参考价值。

java html页面是不可以使用el表达式的,因为会引起系统的冲突,只有jsp文件才可以写el表达式。EL(Expression Language) 是为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。

1.语法结构:$expression。

2.EL 提供“.“和“[ ]“两种运算符来存取数据。当要存取的属性名称中包含一些特殊字符,如 . 或 - 等并非字母或数字的符号,就一定要使用“[ ]“。例如:$ user. My-Name应当改为$user["My-Name"]。

参考技术A java html你说的是jsp吗,jsp文件可以写el,但是html不可以,jsp文件被译成.java文件,浏览器把.java文件译成html,所以在jsp中可用,但html不可以本回答被提问者采纳 参考技术B html页面是无法用el表达式的,会引起冲突,只有jsp才可以使用el表达式
如果非要在html使用类似el表达式的动态效果的话,可以采用thymeleaf 它的用法和el表达式类似,也略微有些不同,熟悉java语法的学习起来很快的
参考技术C JSP:Java Server Page,运行在服务端,浏览器只能解析Html页面,jsp不行. 参考技术D html ? 不可以,你用了mvc框架了吗

EL(表达式语言)与JSTL(JSP标准标签库)

EL(表达式语言)与JSTL(JSP标准标签库)

在JSP页面可以使用Java代码来实现页面显示逻辑,但是网页中夹杂着HTML和Java代码,给网页的设计和维护带来困难,用户可以应用EL来访问和处理应用中的数据,也可以使用JSTL来替换网页中显示逻辑的Java代码,这样JSP页面就尽量减少Java代码的使用,方便以后的维护。

表达式语言(EL)是JSP2.0中新增的,语法如下:${表达式}
EL表达式类似于JSP表达式<%=表达式%>,EL中的表达式会被直接送到浏览器显示,通过page指令的isELIgnored属性说明是否支持EL表达式,当isELIgnored为true时,JSP不能使用EL表达式,isELIgnored默认为true。

EL的语法使用简单,EL使用"[ ]“和”."运算符来访问数据,主要使用EL来获取对象的属性,包括获取JavaBean的属性值,获取数组中的元素,获取集合对象的元素,对于null值直接以空字符串显示,而不是null,在运算时候也不会发生空指针异常,所以使用EL访问对象的属性不需要判断对象是否是null对象。

EL表达式有5个算数运算符,分别为加,减,乘,除,取余。
有6个关系运算符,分别为等于,不等于,大于,大于等于,小于,小于等于。3个逻辑运算符,逻辑与&&,逻辑或||,逻辑非!还有一个条件运算符,如:$ {A?B:C},若A为true,则计算B的结果并返回,若A为false,则计算C的结果并返回。还有一个判空运算符,${empty A},若A不存在,则返回true。

EL隐含对象共11个,我们只学习几个常用的,分别为pageScope,requestScope,sessionScope,applicationScope,param,paramValue.与作用范围相关的EL隐含对象有pageScope,requestScope,sessionScope,applicationScope,分别可以获取JSP隐含对象的pageContext,request,session,application中的数据,如果在EL中没有使用隐含对象指定作用范围,则依次会从page,request,session,application范围查找,若找到就直接返回,若未找到,就返回空字符串。

获取数据的格式如下:
${EL隐含对象.关键字对象.属性}

${EL隐含对象.关键字对象}

与请求参数相关的对象有param和paramValues,获取数据的格式如下:
${EL隐含对象.参数名}

下面看一个小案例,编写一个controller,在控制器类处理方法中使用request对象和Model对象存储数据,然后从处理方法转发到show.jsp页面,在show.jsp显示request对象的数据。

模型类:

public class UserBean {
    private String name ;
    private int age ;
   public UserBean(String name, int age){
       this.name = name ;
       this.age = age ;
   }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

控制器类:

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import pojo.UserBean;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;

@Controller
public class InputController {
    @RequestMapping("/input")
    public String input(HttpServletRequest request, Model model){
        String [] name = {"章", "王", "李", "李"} ;
        request.setAttribute("name", name);
        String [] address = {"北京", "上海", "南京", "南昌"} ;
        model.addAttribute("address", address) ;
        ArrayList<UserBean> users = new ArrayList<>() ;
        UserBean b1 = new UserBean("王", 23) ;
        UserBean b2 = new UserBean("胡", 22) ;
        UserBean b3 = new UserBean("刘", 21) ;
        users.add(b1) ;
        users.add(b2) ;
        users.add(b3) ;
        request.setAttribute("users", users);
        return "show" ;
    }
}

jsp显示页面:

<%--
  Created by IntelliJ IDEA.
  User: nuist__NJUPT
  Date: 2021/10/1
  Time: 17:04
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
从Controller发过来的request内置对象的数据如下:<br>
${requestScope.name[0]}<br>
${requestScope.name[1]}<br>
${requestScope.name[2]}<br>
${requestScope.name[3]}<br>
${requestScope.users[0].name}  ${requestScope.users[0].age} <br>
${requestScope.users[1].name}  ${requestScope.users[1].age} <br>
${requestScope.users[2].name}  ${requestScope.users[2].age} <br>
从Controller转发过来的Model对象的数据如下:<br>
${address[0]}<br>
${address[1]}<br>
${address[2]}<br>
${address[3]}<br>

</body>
</html>

JSTL标签库由5个不同的标签库组成,包括Core,I18N,XML,SQL以及Functions,我们只学习JSLT的Core和Functions标签库中几个常用的标签。

JSTL已经 是JavaEE5的一个组成部分,如果采用支持JavaEE5或者以上版本的集成开发环境,就不再需要配置JSTL了。

配置JSTL步骤如下:
1-在WEB-INF/lib目录下导入JSTL的标准实现。
2-使用taglib标记定义前缀与uri引用

核心标签库之通用标签库
1-<c:out>标签用来显示数据内容,格式如下:
<c:out value = “输出的内容”>
defaultValue
</c:out>
其中,value值可以是一个EL表达式,,也可以是一个字符串,default可有可无,当value值不存在时,输出defaultValue
2-<c:set>标签可以用来设置作用域变量,也可以设置JavaBean属性。
3-<c:remove>标签,如果要删除某个变量,则可以使用该标签。

核心标签库之流程控制标签
<c:if>标签实现if语句的作用,具体语法格式入下:
<c:if test = "条件表达式“>
主题内容
</c:if>
其中,条件表达式可以是EL表达式,也可以是JSP表达式,表达式为true,则执行主体内容,否则,不执行主体内容。

2-<c:choose> <c:when> <c:otherwise>
相等于switch,case,default,与if else语句作用一样
具体的语法格式如下:
<c:choose>
<c:when test = “条件表达式1”>
主体内容1
</c:when>
<c:when test = “条件表达式2”>
主体内容2
</c:when>
<c:otherwise>
表达式都不正确执行的主体
</c:otherwise>
</c:choose>

核心标签库之迭代标签
1-<c:forEach>标签可以实现程序中的for循环,语法格式如下:
<c:forEach var = “变量名” items = “数组或者Collection对象”>
循环体
</c:forEach>
items属性可以是数组或Collection对象,每次循环读取对象中的一个元素,并赋值给给var属性指定的变量,之后就可以在循环体中使用var指定的变量获取对象的元素。

例如在Contrller中有以下代码:

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import pojo.UserBean;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;

@Controller
public class ItemsController {
    @RequestMapping("/save")
    public String save(HttpServletRequest request, Model model) {
        ArrayList<UserBean> users = new ArrayList<>();
        UserBean b1 = new UserBean("张", 23);
        UserBean b2 = new UserBean("刘", 22);
        users.add(b1) ;
        users.add(b2) ;
        request.setAttribute("users", users);
        return "result" ;
    }
}

那么在对应的JSP页面就可以使用<c:forEach>语句遍历出数组元素。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
  Created by IntelliJ IDEA.
  User: nuist__NJUPT
  Date: 2021/10/1
  Time: 19:41
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<table>
    <tr>
        <th>姓名</th>
        <th>年龄</th>
    </tr>
    <c:forEach var = "user" items = "${requestScope.users}">
        <tr>
            <td>${user.name}</td>
            <td>${user.age}</td>
        </tr>
    </c:forEach>
</table>
</body>
</html>

在有些时候需要为标签指定begin,end,step,varStatus属性,begin为迭代的开始位置,默认为0,end表示迭代结束的位置,默认是最后一个元素,step为迭代步长,默认为1,varStatus代表迭代变量的状态,包括count,index。first和last

<c:forTokens>标签用于迭代字符串中由分隔符分割的成员。
如下代码:

<c:forTokens items="王国栋1:王国栋2:王国栋3" delims="" var = "name">
    ${name}<br>
</c:forTokens>

用:分割姓名,并赋值给var,然后使用EL表达式依次取出name的值。

函数标签库
在JSP页面中调用JSTL中的函数时需要使用EL表达式,调用的语法格式如下:
${fn:函数名(参数1,参数2…)}
1-contains函数
该函数的功能是判断一个字符串是否包含指定的字符串,如果包含,则返回true,否则返回false,定义如下:
contains(string,substring)
该函数的调用示例代码如下:
${fn:contains(“I am studying”, “am”)}

2-containsIgnoreCase函数
与contains类似,不区分大小写。

3-endsWith函数
该函数的功能是判断一个字符串是否以指定的后缀结尾。
定义如下:
endsWith(string, suffix)
该函数调用实例代码:
${fn:endsWith(“I Am Studing”, “am”)}

4-indexOf函数
该函数返回指定字串在某一字符串第一次出现的索引,找不到时将返回-1.

5-join函数
该函数的功能是将一个String数组中的所有元素合并成一个字符串,并用指定的分隔符分开。定义如下:
join(array, separator)
函数调用代码:
${fn:join(my, “,”)}

6-length函数
该函数的功能是返回集合元素的个数或者字符串中字符的个数,其定义如下:
length(input)
函数调用代码示例:
${fn:length(“wangGuodong”)}

7-replace函数
该函数是将字符串出现的所有beforestring用afterstring替换,并返回替换后的结果,其定义如下:
replace(string, beforestring, afterstring)

8-split函数
该函数的功能是将一个字符串用指定的分隔符separator分成一个字符串数组。其定义如下:
split(string, separator)
该函数的调用实例代如下:

<c:set var = "my" value = "${fn:split('I am studying', ' ')}"/>
<c:forEach var = "element" items = "${my}">
    ${element}<br>
</c:forEach>

将I am studying 按照空格分割后传给my,使用forEach循环取出my中的值,使用EL表达式取出来。

9-startsWith函数
该函数判断一个字符串是否以一个指定前缀开头,其定义如下:
startWith(string,prefix)

10-substring函数
该函数的功能是返回一个字符串的子字符串,其定义如下:
substring(string, begin, end)

11-toLowerCase函数
该函数的功能是将一个字符串转换成它的小写版本。

12-toUpperCase函数
该函数的功能是将一个字符串转换成它的大小版本

13-trim函数
该函数的功能是删除字符串开头和结尾的空格

本次主要学习了EL表达式语言,JSTL核心标签库和JSTL函数标签库,EL和JSTL的应用大大提高了编程效率,并且降低了难度。

以上是关于java html页面可以使用el表达式吗的主要内容,如果未能解决你的问题,请参考以下文章

EL表达式能用在html页面吗?

在js或者jquery里可以使用el表达式吗?

EL表达式

EL(表达式语言)与JSTL(JSP标准标签库)

jsp-EL表达式

JSTL和EL