`
菜鸟2号
  • 浏览: 6883 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
社区版块
存档分类
最新评论

EL表达式的学习

    博客分类:
  • J2EE
阅读更多

1.访问对象属性的方式

   (1)用点号运算符"."访问,如${user.name}
   (2)用方括号运算符"[]"访问,如${user["name"]}
    注:有特殊字符的情况,一般用方法2   

2.访问数组元素

   用方括号运算符"[]"访问,如${users[0]}

3.运算符

    除了支持常用的的算术,关系,逻辑运算符外,还有条件运算符 a?b:c,如${a>b ? a : b}   特别的增加了一个检
查对象是否为空的运算符 empty,如${empty var}   如果var 
      (1)不存在,即没被定义 
      (2)值为null 
      (3)var为集合的对象时,并且集合为空
    则返回 true

4.隐含对象

     applicationScope
    应用程序范围内的scoped变量组成的集合
    cookie
    所有cookie组成的集合
    header
    HTTP请求头部,字符串
    headerValues
    HTTP请求头部,字符串集合
     initParam
    全部应用程序参数名组成的集合
     pageContext
     当前页面的javax.servlet.jsp.PageContext对象
    pageScope
    页面范围内所有对象的集合
     param
     所有请求参数字符串组成的集合
     paramValues
     所有作为字符串集合的请求参数
       requestScope
      所有请求范围的对象的集合
     sessionScope
     所有会话范围的对象的集合

    其中,applicationScope,pageScope,requestScope,sessionScope这四个隐含对象,虽然类似JSP中的,但是在EL中,这四个隐含对象只能用来取得范围属性值,即getAttribute(String name),却不能取得其它相关信息。
   
 

如<%request.setAttribute("username")%>,在EL中可以这样使用${sessionScope.username}。

    
   接上面,那么所谓“其它相关信息”怎么取得呢?这就用到了pageContext对象

 如<%session.getCreationTime()%>对应${pageContext.session.creationTime}
   如<%request.getRequestURL()%>对应${pageContext.request.requestURL}

    
   与输入有关的隐含对象,param,paramValues,取用户请求参数的时候可以用到,这个貌似只有在纯jsp编程中才用的到吧。

如<%request.getParameter("username")%>在EL中就是${param.username},而paramValues则是控件数组。

 

5.命名变量

EL表达式中的变量成为命名变量,关于这个命名变量还是用下面这段代码说会比较清楚
   如${username}等于这段代码

 <%
     String username = (String)pageContext.findAttribute("username");
     if(username != null){
   %>
   <%=username%>
   <%
     }
   %>

 
   来看一下 Object findAttribute(String name)这个函数的API
   Searches for the named attribute in page, request, session (if valid), and application scope(s) in order and returns the value associated or null.
   是说按照page,request,session(如果有效),application的顺序,来返回这个关联的对象。

 

6.EL函数

EL函数实际与java中的方法相对应。编写自定义EL函数的步骤如下:
    (1)编写一个public的java类,类中要作为EL函数的方法必须是 public static 类型的。
如public class MyTag
  {
    public static String append(String str1, String str2)
     {
      String bigStr = str1 + str2;
      return bigStr;
     }
  }
 
   (2)编写一个标记库描述文件
   在WEB-INF目录下新建一个.tld文件,文件名自取,本例为myTag.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 web-jsptaglibrary_2_0.xsd"    
     version="2.0">    
        
     <description>MyTag</description>    
     <tlib-version>1.0</tlib-version>    
     <short-name>mytag</short-name>    
     <uri>/mytaglib</uri>    
    
     <function>    
        <description>MyTag</description>    
        <name>append</name>    
        <function-class>com.xxx.util.MyTag</function-class>    
        <function-signature>java.lang.String append(java.lang.String, java.lang.String)</function-signature>         
     </function>    
  </taglib>   
    (3)在jsp中导入标签库在JSP页面导入标签库(不用再Web.xml中说明tld的位置,servlet容器可自动搜索tld文件,因此可打包成jar文件)
<%@taglib uri="/mytaglib" prefix="mytag" %>
      (4)使用EL调用函数
${mytag:append("WEL","COME")}

7.可能出现的问题

   (1)EL包冲突问题,解决方法转自javaeye中chxkyy的博客

javax.faces.FacesException: java.lang.LinkageError: loader constraints violated when linking javax/el/ExpressionFactory class  
    org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:425)  
    org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:211)  
    org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)  
    org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:216)  
    org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)  
    org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:132)  
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:140)  
    org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)  
    org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)  

    错误的原因是tomcat/lib下的el-api.jar与项目WEB-INF/lib目录下的el-api.jar冲突。

     把项目目录下的el-api.jar删除即可。

     tomcat/lib下有包若干,下次在遇到此异常可以先检查下是否存在冲突。

 

分享到:
评论

相关推荐

    EL表达式学习资料

    ### EL表达式学习资料 #### 一、EL简介 EL(Expression Language)是Java Server Pages (JSP) 技术中的一种简化的脚本语言,主要用于简化页面开发中对对象和属性的访问过程。EL 表达式允许开发者在 JSP 页面中直接...

    el表达式的学习

    el表达式学习,这可是一个学好el表达式的绝好文档哦,赶快下载下来吧

    EL表达式 学习

    一个html格式简单教程 不错的 推荐一看

    el表达式用法部分解说

    ### EL表达式详解 EL(Expression Language)表达式在Java Web开发中扮演着重要的角色,尤其是在JSP(Java Server Pages)技术中。...在未来的学习和实践中,希望你能够灵活运用EL表达式,提高自己的开发技能。

    EL表达式学习笔记(经典版)

    本篇笔记将深入解析EL表达式的语法、用法以及其隐含对象。 首先,让我们了解EL表达式的语法结构。基本形式是 `${expression}`,其中`expression`是一个表达式,用于访问或计算值。EL表达式可以在HTML和JSP标签中...

    【温故而知新】一个极好极全极简明的EL表达式的学习文档

    在这个文档中,我们将深入探讨EL表达式,并通过与OGNL、JSTL和STRUTS2标签的对比,进一步理解其用法。 首先,让我们关注EL表达式的语法。EL表达式通常以`#{}`包围,它允许开发者以一种声明式的方式访问和操作Java...

    JAVAEE实验报告EL表达式和jstl标签库的使用.pdf

    在实验中,我们学习了 EL 表达式和 JSTL 标签库的原理和使用,了解了如何使用 EL 表达式和 JSTL 标签库来简化 JSP 页面的开发。我们还学习了如何使用 EL 表达式和 JSTL 标签库来实现具体的功能,例如输出数据、条件...

    EL表达式的应用

    2. **EL与JSTL的结合**:学习如何在JSP页面中使用EL表达式来设置JSTL标签的属性,以及如何在JSTL标签中嵌入EL表达式。 3. **EL的上下文**:理解EL表达式的上下文,包括变量作用域(page, request, session, ...

    EL表达式详解+实例教程

    通过学习本教程,你将能够熟练掌握EL表达式的规范,并能够灵活运用到实际开发中。 #### 二、EL表达式的基本语法 ##### 1. 语法结构 EL表达式的语法结构非常简单,通常采用 `${expression}` 的形式。其中 `...

    EL表达式详解教程.zip

    EL(Expression Language,表达式语言)是Java EE中一种强大的模板语言,主要用于在JSP页面中简化数据访问和处理。它允许开发者通过简洁的语法来...学习并熟练掌握EL表达式,对于提升JSP开发的效率和代码质量至关重要。

    EL表达式基础学习

    学习EL表达式,可以让开发者更容易理解和使用JSP页面。 首先,了解EL表达式的基本用法非常重要。EL表达式都是以“${”开始,并以“}”结束。例如,${“Hello World”}用于输出字符串常量“Hello World”,而${str}...

    EL表达式完整介绍,很好的一份学习资料

    EL(Expression Language,表达式语言)是Java...通过学习和实践这些EL表达式的知识,你可以更高效地开发JSF应用,提升代码的可读性和维护性。这份教程将引导你深入理解EL的每一个细节,确保你在实际工作中得心应手。

    apache开源项目源码commons-el-1.0-src(全部高质量el表达式的java源程序)

    java,el,el表达式,el表达式源码,apache开源项目源码commons-el-1.0-src 各种el表达式操作工具类源码,你会从中得到意想不到的效果! apache开源组织开发的开源项目源码,其优良的代码风格和高质量的源码是学习者...

    JavaWeb-11 JSP&EL表达式

    在这个主题“JavaWeb-11 JSP&EL表达式”中,我们将深入探讨两个关键组件:JSP(JavaServer Pages)和EL(Expression Language),它们在JavaWeb开发中的作用以及如何协同工作。 JSP是Java的一种视图技术,允许...

    java中JSP和el表达式的隐含对象

    ### Java中JSP和EL表达式的隐含对象详解 在Java Web开发中,JSP(Java Server Pages)作为一种常用的技术被广泛应用于构建动态网页。它允许开发者将HTML、JavaScript等静态网页元素与动态生成的内容混合在一起。在...

    el表达式资料全集(里面包含4个文件,超值)

    EL(Expression Language),全称Java...提供的"el表达式资料全集"包含了四个文件,应该是关于EL和JSTL的教程、示例或者练习,这些资源对于学习和巩固这两个主题将非常有帮助。建议仔细研读,通过实例练习来加强理解。

    EL表达式的使用以及应用技巧

    一个能帮助一些初学者来学习el表达式的用法的 大家来看看吧

    JSP的JSTL标签和EL表达式大全

    **JSP的JSTL标签和EL表达式详解** JSP(JavaServer Pages)是一种动态网页技术,它允许开发者在HTML或XML文档中嵌入Java代码来生成动态内容。然而,传统的JSP脚本语法可能导致代码混乱且不易维护。为了解决这个问题...

    EL表达式和Jstl.docx

    ### EL表达式与JSTL标签库详解 #### 一、EL表达式 **1.1 什么是EL表达式** EL(Expression Language)表达式是一种简洁的语法结构,用于访问和处理Java对象,特别是在JSP页面中。它使得开发者能够更方便地在JSP...

Global site tag (gtag.js) - Google Analytics