el标签

uri:本地访问路径
url:全网路径

el基本用法

 ${作用域范围(.对象名).属性}

  <%user user = new user();
  user.setusername("admin");    
  session.setattribute("user",user) ;%>

等同于

   ${sessionscop.user.username}

访问四大域中的值

 java写法
    pageContext.setAttribute("name","page");
    request.setAttribute("name","request"); 
    session.setAttribute("name","session"); 
    application.setAttribute("name","application"); 
    
 el标签写法
     ${name}//会在四大域中从小到大的查询,找到第一个就终止查询
    ${pageScope.name}
    ${requestScope.name}
    ${sessionScope.name}
    ${applicationScope.name}
     如果取的值为空,则返回“ ”而不是null
     el只能取四大域的值

el标签"."与"[ ]"运算符
${pageScope.user.name}等同于${pageScope.user["name"]}
当开辟域空间设置域空间名为"user.name"时就必须使用"[ ]";
当对象内容会发生变化就需要使用“[ ]”;${sessionscope[pagescope.var].username}或${sessionscope[param.user].username}
 <%
user user = new user();
user.setusername("xiaohei");    
session.setattribute("user1",user) ;

user user2 = new user();
user.setusername("admin");    
session.setattribute("user3",user2) ;
pagecontext.setattribute("var","user1或user2")
%>

接受请求参数
${param.name}  (也可以接受表单提交的数据)
${sessionscope[param.user].username}
(http://localhost:8080/WebTest/el.jsp?user=user1(取出”xiaohei“若=user3取出admin))
param等于request.getparameter()此方法;

接受一组的参数
提交端
<form action="/WebTest/el1.jsp" method="post">
        <input type="checkbox" name="enjoy"  value="打架" checked="checked">打架
        <input type="checkbox" name="enjoy"  value="打人">打人
        <input type="checkbox" name="enjoy"  value="打球">打球
        <input type="submit" value="提交">
  </form>
接收端
<%request.setCharacterEncoding("UTF-8"); %>
    ${paramValues.enjoy[0]}
    ${paramValues.enjoy[1]}
    ${paramValues.enjoy[2]}

集合里装对象的情况
Map map = new HashMap();
 map.put("p1",new Person("hauiren"));
 map.put("p2",new Person("mzheng"));
 request.setAttribute("hh",map);
 %> 
 ${hh.p1.name }
${hh.p2.name }

对象属性是集合的情况
    List<TestDemo> list1 = new ArrayList<TestDemo>();
        list1.add(new TestDemo("测试1"));
        list1.add(new TestDemo("测试2"));
        Employee em1 = new Employee("员工1", "男",list1);
        Employee em2 = new Employee("员工2", "男",list1);
        List<Employee> list2 = new ArrayList<Employee>();
        list2.add(em1);
        list2.add(em2);
        DepartmentDemo dp = new DepartmentDemo();
        dp.setName("部门1");
        dp.setList(list2);

empty运算符:如果判断的对象是null或者空字符串,都返回true。对于集合,即使集合对象本身不是null,没有任何元素,也返回true。
 ${empty user?"请登录":"欢迎您"}${user}<br/>

        request.setAttribute("dp", dp);
        request.getRequestDispatcher("../el.jsp").forward(request, response);
${dp.name }
${dp.list[0].name}
${dp.list[1].name}
${dp.list[0].list[0].name }


11大EL隐式对象中,其中一个是表示自身对象外,其余都是表示的Map结构
EL隐式对象名称            Java类型
pageContext            javax.servlet.jsp.PageContext
剩余的都是代表的Map集合
pageScope                java.util.Map
requestScope            java.util.Map
sessionScope            java.util.Map
applicationScope            java.util.Map
param                java.util.Map
paramValues            java.util.Map
Header                java.util.Map HTTP 信息头,字符串
headerValues            java.util.Map HTTP 信息头,字符串数组
cookie                java.util.Map
initParam                java.util.Map
Header                java.util.Map
headerValues            java.util.Map
cookie                java.util.Map
initParam                java.util.Map

EL自定义函数
编写完标签库描述文件后,需要将它放置到<web应用>\WEB-INF目录中或WEB-INF目录下的除了classes和lib目录之外的任意子目录中。 

调用普通类的静态方法(EL函数)
        编写步骤(自定义EL函数的编写步骤即自定义标签的编写步骤):
            a、编写一个普通的java类,提供一个静态方法
            public class FunctionDemo {
                public static int  haha(int a,int b){
                    return a+b;
                }
            }
            b、在JavaWeb应用的WEB-INF目录下建立一个扩展名是tld(taglib definition)的XML文件(参考Tomcat中的示例)。内容如下:
        
                <tlib-version>1.0</tlib-version>
                <short-name>myfn</short-name>
                <uri>http://www.xinhua.cn/myfn</uri>//TLD文件中的<uri> 元素用指定该TLD文件的URI,在JSP文件中需要通过这个URI来引入该标签库描述文件。

                <function><!-- 定义函数 -->TLD文件中的<uri> 元素用指定该TLD文件的URI,在JSP文件中需要通过这个URI来引入该标签库描述文件。

                    <name>toUppercase</name>
                    <function-class>cn.xinhua.el.FunctionDemo</function-class>
                    <function-signature>int haha(int,int)</function-signature>
                </function>
            </taglib>

猜你喜欢

转载自blog.csdn.net/qq_43748089/article/details/85852772