参考资料:
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()方法去获取返回值。