Java EL表达式

参考资料:

EL表达式:http://www.cnblogs.com/xdp-gacl/p/3938361.html

 

在JEE6中,JSP中的EL表达式支持带参数的方法调用了(方法必须是static)。可以像这样调用:

     ${foo.bar(baz)} 。

 

在JSP页面用EL表达式调用对象的属性的话,一般情况下是调用的getXxx()方法(或者isXxx()方法)

例如你写了个类叫做Person

package TestPackage;

public class Person {

    private String name;

    public String getName() {
        return name;
    }

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

    public String getPassword() {
        return "get密码";
    }

    public boolean isGoodman() {
        return true;
    }

    public boolean isBadman() {
        return false;
    }
}

 

那么如果我在ElTest.jsp这个jsp页面中用EL表达式获取各个属性如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@page import="TestPackage.Person"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://"
            + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
%>

<%
    request.setCharacterEncoding("UTF-8");
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>El表达式</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

</head>

<body>

    <%
        Person p1 = new Person();
        p1.setName("李好");
        request.setAttribute("person1", p1);
    %>
    <br> 获取person.name属性:${requestScope.person1.name }
    <br> 获取person.password属性:${person1.password }
    <br> 这个人是好人吗?:${requestScope.person1.goodman }
    <br> 这个人是坏人吗?:${person1.badman }
</body>
</html>

运行结果:

${name }来获取,之所以可以这样调用是因为我们写了public String getName() {}这个方法

 

${name } EL表达式会自动的把name的首字母n转成大写变成Name,然后加上get,也就是拼接成getName()这个方法

然后他去User类中找这个方法,找到了就执行这个方法获取返回值,EL表达式就是这样获取到javabean的属性值的.

 这个${request.person1.name } EL表达式里面的name不是我们在Person类中定义的这个name属性,而是 public String getName()这个方法方法名去掉get这三个字母然后把N变成小写之后的字符串,也就是name。意思就是说,就算我们在Person类中没有定义  private String name ;  这个name属性,而直接写成

public String getName() {
    return "小明";
}

EL表达式也会获取到这个方法的返回值.

我们一般说用EL获取某某对象的属性,其实就是那个对象的属性,有一个对应get方法,而在这个get方法里面用return 返回了那个属性值,所以才可以获取到.

 

再然后就是我再上面代码里有一个getPassword()方法,但是没有定义password这个属性,这样子做是为了证明只要有get方法,EL表达式在页面中就可以获取到.只要你把getPassword的get去掉,然后把Password的P换成小写p,变成password再jsp页面也是可以通过${person1.password }获取getPassword()这个方法的返回值的.

 

其实EL表达式默认还会调用 is开头的isXxx()方法去获取返回值。

 

posted @ 2016-08-12 16:34  SaraMorning  阅读(320)  评论(0)    收藏  举报