zoukankan      html  css  js  c++  java
  • JavaWeb -- Jsp中的 EL表达式

    1. lEL 全名为Expression LanguageEL主要作用:
    l获取数据
    EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象、获取数据。(某个web域 中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)
    l执行运算
    利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。${user==null}
    l获取web开发常用对象
    EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。
    l调用Java方法
    EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。
     
    1.获取数据
    EL表达式用于获取数据,在JSP页面中可使用${标识符}的形式,通知JSP引擎调用pageContext.findAttribute()方法,以标识符为关键字从各个域对象中获取对象。如果域对象中不存在标识符所对应的对象,则返回结果为””(注意,不是null)。
    示例:使用EL表达式获取requestsessionapplection域中的数据。
    EL表达式中也可以使用${customerBean.address}的形式来访问JavaBean对象的属性。
    示例:使用EL表达式获取Bean属性。
    结合JSTL标签,EL表达式也可轻松获取各种集合中的元素。
    示例:使用EL表达式获取ListMap集合中的元素。
    EL表达式也可使用类如${1==1}的形式进行简单的逻辑判断。
     
    JSTL标签库
    JSTLsun公司开发的一套标签库,使用JSTL可以在页面中实现一些简单的逻辑,从而替换页面中的脚本代码。
    在页面中使用JSTL标签需完成以下2个步骤:

    1、导入jstl.jarstanderd.jar这两个JSTLjar文件。

    2、在JSP页面中使用<%@ tablib url=“” prifix=“” %>元素导入标签库。

    JSTL标签库中常用标签:

    <c:foreach var=“” items=“”>

    <c:if test=“”>

    <%@page import="javax.swing.plaf.basic.BasicScrollPaneUI.HSBChangeListener"%>
    <%@page language="java" import="java.util.*,com.kevin.*"  pageEncoding="UTF-8" errorPage="/errors/error.jsp"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Insert title here</title>
    
    </head>
    <body>
    
    <font color="red">
    
    
    	<br />---------------------------------------------------<br />
    	<%
    		Person person = new Person("xiang");
    		request.setAttribute("person", person);
    	%>
    	${person.name } <br/>
    	
    	<br />---------------------------------------------------<br />
    	<%
    		List list = new ArrayList();
    		list.add(new Person("kevin"));
    		list.add(new Person("xiang"));
    		request.setAttribute("list", list);
    	%>
    	${list[0].name} <br/>
    	<c:forEach var="pList" items="${list}">
    		${pList.name} <br/>
    	</c:forEach>
    	
    	<br />---------------------------------------------------<br />
    	<%
    		Map map = new HashMap();
    		map.put("aaaa", new Person("aaaa___"));
    		map.put("1111", new Person("1111____"));
    		request.setAttribute("map", map);
    	%>
    	${map.aaaa.name} <br/>
    	${map['1111'].name} <br/>
    	<c:forEach var="entry" items="${map}">
    		${entry.key} : ${entry.value.name} <br />
    	</c:forEach>
    	
    	<br />---------------------------------------------------<br />
    	${pageContext.request.contextPath}   <!-- 动态获取Web应用的路径 /WebTest4 -->
    	
    	<br />---------------------------------------------------<br />
    	<c:if test="${person==null}">
    		请登录!!!
    	</c:if>
    	<c:if test="${person!=null}">
    		欢迎:${person.name}
    	</c:if>
    	
    </font>
    
    </body>
    </html>

    2. 执行运算


    3. 获得web开发常用对象
    4. 使用EL调用Java方法 (EL函数)
    lEL表达式语法允许开发人员开发自定义函数,以调用Java类的方法。
    示例:${prefixmethod(params)}
    EL表达式中调用的只能是Java类的静态方法
    这个Java类的静态方法需要在TLD文件中描述,才可以被EL表达式调用。
    EL自定义函数用于扩展EL表达式的功能,可以让EL表达式完成普通Java程序代码所能完成的功能。
    EL函数 与 自定义标签的区别
    虽然两者都可以移除JSP中的Java代码, 但是EL函数不能传入pageContext对象,所以只能移除与Web对象无关的Java代码。
    EL Function开发步骤
    编写Java类静态方法
    public class HtmlFilter {
            public static String filter(String message) {
    
            if (message == null)
                return (null);
    
            char content[] = new char[message.length()];
            message.getChars(0, message.length(), content, 0);
            StringBuilder result = new StringBuilder(content.length + 50);
            for (int i = 0; i < content.length; i++) {
                switch (content[i]) {
                case '<':
                    result.append("<");
                    break;
                case '>':
                    result.append(">");
                    break;
                case '&':
                    result.append("&");
                    break;
                case '"':
                    result.append(""");
                    break;
                default:
                    result.append(content[i]);
                }
            }
            return (result.toString());
        }
    }
    编写tld文件, 和自定义标签一样
    <?xml version="1.0" encoding="UTF-8" ?>
    
    <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
        version="2.0">
        <description>A tag library exercising SimpleTag handlers.</description>
        <tlib-version>1.0</tlib-version>
        <short-name>kevin</short-name>
        <uri>http://www.kevin.com</uri>
        <function>
            <name>filter</name>
            <function-class>com.kevin.web.tag.HtmlFilter</function-class>
            <function-signature>java.lang.String filter( java.lang.String )</function-signature>
        </function>
        
    </taglib>  
    JSP使用
    <%@ page language="java" contentType="text/html; charset=UTF-8" import="java.util.*" pageEncoding="UTF-8"%>
    <%@taglib uri="http://www.kevin.com" prefix="fn" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Insert title here</title>
    </head>
    <body>
    
    <a href=''>点点</a>
    ${fn:filter("<a href=''>点点</a>")}
    </body>
    </html>
    如果函数不只有一个参数 ,filter(String message, List list), 在Jsp中调用时不能在$中再 嵌套$,直接取域中的list即可,${fn:filter("<a href=''>点点</a>", list)}

    5.EL函数库 
    数据回显示例:
    <body>
    
    <% 
    	User user = new  User();
    	String[] licks = {"sing", "dance", "football"};
    	user.setLicks(licks);
    	request.setAttribute("user", user);
    %>
    
    <input type="checkbox" name="lick" value="sing" ${fn:contains(fn:join(user.licks, ","),"sing")?'checked':''} />唱歌  <br />
    <input type="checkbox" name="lick" value="dance" ${fn:contains(fn:join(user.licks, ","),"dance")?'checked':''} />跳舞 <br />
    <input type="checkbox" name="lick" value="football" ${fn:contains(fn:join(user.licks, ","),"football")?'checked':''} />足球 <br />
    <input type="checkbox" name="lick" value="basketball" ${fn:contains(fn:join(user.licks, ","),"basketball")?'checked':''} />篮球 <br />
    
    </body>
    </html>

    EL函数库
    contains boolean contains(java.lang.String, java.lang.String) ${fn:contains(name, searchString)}
    containsIgnoreCase boolean containsIgnoreCase(java.lang.String, java.lang.String) ${fn:containsIgnoreCase(name, searchString)}
    endsWith boolean endsWith(java.lang.String, java.lang.String) ${fn:endsWith(filename, ".txt")}
    escapeXml java.lang.String escapeXml(java.lang.String) ${fn:escapeXml(param:info)}
    indexOf int indexOf(java.lang.String, java.lang.String) ${fn:indexOf(name, "-")}
    join java.lang.String join(java.lang.String[], java.lang.String) ${fn:join(array, ";")}
    length int length(java.lang.Object) ${fn:length(shoppingCart.products)}
    replace java.lang.String replace(java.lang.String, java.lang.String, java.lang.String) ${fn:replace(text, "-", "&#149;")}
    split java.lang.String[] split(java.lang.String, java.lang.String) ${fn:split(customerNames, ";")}
    startsWith boolean startsWith(java.lang.String, java.lang.String) ${fn:startsWith(product.id, "100-")}
    substring java.lang.String substring(java.lang.String, int, int) ${fn:substring(zip, 6, -1)}
    substringAfter java.lang.String substringAfter(java.lang.String, java.lang.String) ${fn:substringAfter(zip, "-")}
    substringBefore java.lang.String substringBefore(java.lang.String, java.lang.String) ${fn:substringBefore(zip, "-")}
    toLowerCase java.lang.String toLowerCase(java.lang.String) ${fn.toLowerCase(product.name)}
    toUpperCase java.lang.String toUpperCase(java.lang.String) ${fn.UpperCase(product.name)}
    trim java.lang.String trim(java.lang.String) ${fn.trim(name)}

  • 相关阅读:
    MVC视图布局页常用代码
    常用meta标签及说明
    重新认识Android
    为什么V8引擎这么快?
    node.js入门及express.js框架
    红星美凯龙CEO车建新的圆融和霸气
    【一个王朝的背影】--余秋雨
    Android源代码结构分析
    Android文件系统的结构
    Mac OSX 平台安装 MongoDB
  • 原文地址:https://www.cnblogs.com/xj626852095/p/3648059.html
Copyright © 2011-2022 走看看