表达式语言(Expression Language ,EL)是jsp2.0中新增的功能。可以避免出现许多的Scriptlet代码
格式: ${ 属性名称 }, 使用表达式语言可以方便的访问对象中的属性,提交的参数或者进行各种数学运算,而且使用表达式语言最大的特点是如果输出的内容是null,则会自动使用空字符串("")表示。
<%request.setAttribute("name", "info");%>
${name}
表达式语言的主要功能就是进行内容的显示,为了显示的方便,在表达式语言中提供了许多内置对象,通过对不同内置对象的设置,表达式语言可以输出不同的内容。内置的对象如下:
NO | 表达式内置对象 | 说明 |
1 | pageCotext | 表示javax.servlet.jsp.PageContext对象 |
2 | pageScope | 表示从page属性范围查找输出属性 |
3 | requestScope | 表示从request属性范围查找输出属性 |
4 | sessionScope | 表示从session属性范围查找输出属性 |
5 | applicationScope | 表示从application属性范围查找输出属性 |
6 | param | 接受传递到本页的参数 |
7 | paramValues | 接收传递到本页面的一组参数 |
8 | header | 取得一个头信息数据 |
9 | headerValues | 取得一组头信息数据 |
10 | cookie | 取出cookie中的数据 |
11 | initParam | 取得配置的初始化参数 |
但是如果我们要访问特定范围内的属性可以这样: ${ sessionScope.info} ,同理request范围的使用 requestScope.info。
接收请求参数,功能与request.getParameter()类似,格式是: ${param.参数名称}
接收一组数据是,例如checkbox的值,我们可以用 ${ paramValues.inst[0]} inst指的是checkbox的name属性。
下面我们卡一下集合操作,在表达式语言中已经很好的支持了集合的操作,可以方式使用表达式语言输出Collcetion(子接口 :list set)、map集合中的内容。
例如<% List all=new ArrayList(); all.add("lingli"); all.add("[email protected]"); request.setAttribute("allinfo",all);%>
输出:${allinfo[0]} ${allinfo[1]}
map集合操作<%Map map=new HashMap(); map.put("lxh","lingxinghua"); map.put("age","40"); request.setAttribute("mapinfo",map);%>
输出:${mapinfo["lxh"]} ${mapinfo["age"]}
接着我们看在MVC中应用表达式
在一个java对象中我们假设定义了name,age ,address等属性,当然我们设置了set和get方法。
我们在通过实例化对象,并且应有set方法进行赋值了之后,我们通过request.setAttribute("people", peo)把实例化对象传入进去,那么我们怎么用EL表达式来输出里面的值呢。
其实我们这样就可以输出 ${people.name} ${people.age} ${people.address}直接就可以输出里面的值。
如果我们把java对象的people加到一个List集合中,
List
People people=new People();
people.setName=("fzy");
people.setAge=(20);
people.setAddress("ShanDong");
all.add(people);
request.setAttribute("alllist",all);
request.getRequestDispatcher("next.jsp").forward(request,response);
接着我们在next.jsp页面中
<%
List all=(List)request.getAttribute("alllist");
Iteratro it=all.iterator();
%>
<%
while(it.hasNext()){
pageContext.setAttribute("people",iter.next);
%>
${people.name}
${people.age}
${people.address}
<%
}
%>
这样我们就实现了输出。