EL表达式
最常用的方式:作用域中存储的:名.属性名 eg:${paramName.id}(paramName对应作用域中的名字,ID对应Java类中的属性名)
四大作用域取值顺序:按作用域从小到大取pageContext>requset>session>application(注意:session在没关闭浏览器前,一直存在,所以取不到application中的值)
分别取对应作用域的值:作用域名+Scope.属性名 eg:requsetScope.paramName.id;(id根据实际情况决定写不写)
param和paramValues:
param:取 路径?后的参数 eg:http://localhost:8080/day719/testEL01.jsp?uname=aaa,取得是aaa
语法:${param.uname} 相当于request.getParameter("uname");
paramValues:取同名参数的所有值,装在string数组中 eg:http://localhost:8080/day719/testEL01.jsp?fav=1&fav=2
语法:${paramValues.fav}取整个数组,打印一串:[Ljava.lang.String;@463e88
${paramValues.fav[0]}取数组中的第一个元素
${paramValues.fav[1]}取数组中的第二个元素
。。。。。。
EL实现变量类型的自动转换:只要涉及“+”就会尝试将其转换成数字,除法和js一样
eg:${100+100}值200 ${"100"+100}值200 ${"100abc"+100}会报NumberFormatException ${null+“”}值0
以[]的形式获取值:动态获取要显示的内容 这是中括号的优势
与文档第一种获取方式对比:
省:${person1.addr.province }
市:${person1.addr.city }
县:${person1.addr.county }
<hr/>
省:${person1.addr["province"] }
市:${person1.addr["city"]}
县:${person1.addr["county"] }
list和map的取值:先要将list或map用setAttribute设置到作用域中(这一步一定要记住,因为EL就是负责在作用域中取值)
具体取值方法:${list[0]} list是存放在作用域中的名 eg:session.setAttribute("list", list);
${list[1]}
<hr/>
${map.a} a代表map中的键
${map.b} b代表map中的键
empty:判断作用域中名对应的值是否为空,是返回true,不为空返回false
JavaBean:
request.setAttribute("stu", student);
${stu.handsome} handsome是javaBean类中的属性
${stu.name}name是javaBean类中的属性
${stu.sId}sId是javaBean类中的属性
${stu.Gender}Gender是javaBean类中的属性
JSTL标签库:他是
首先记得要引入标签 prefix 标签的缩写 uri 标签的地址
c标签:所有属性如图:
out:
属性有:value (值可以直接写,也可以写el表达式),
default(当value中值为空时,默认显示default中的值),
escapeXml( 默认是true 不解析 xml 改为false 过后 解析xml)
set:属性有:value() 对象的值
target目标对象 用el表达式来写 property 对象的属性名
remove:
remove 可以指定删除哪个作用域的 scope 如果不指定 所有var 写的属性名 都删除
if:相当于 if语句 里面的test 都写 el表达式(只能是boolean类型),var里表示test中EL表达式返回值,scope指定作用域
choose:下面的c:when 相当于 if 和else if c:otherwise 相当于 else
里面的test 都写 el表达式(只能是boolean类型)
forEach:
items 被迭代的集合 (使用el表达式) var 被迭代的当前对象 (不能使用el表达式) 循环中在使用var 的时候必须使用el表达式 -->
step 代表步数 begin 代表从哪个下标开始 end 代表哪个下标结束-->
varStatus index 表示下标 count第几个 first 是否是第一个 last 是否是最后一个 返回boolean -->
用forEach实现下来菜单:
eg:
<%
Map map=new HashMap();
for(int i=0;i<20;i++){
map.put("key"+i, "value"+i);
}
session.setAttribute("map", map);
%>
${map}
<hr/>
${map.key1 }
<select >
<option>--请选择--</option>
<c:forEach items="${map}" var="m">
<option value="${m.value }">${m.key}</option>
</c:forEach>
</select>
${param.name}
C标签做动态引入,与include的区别:c可以引入外部资源,如ww.baidu.com,但并不常用,因为引入后也会没有办法是有其功能
语法: <c:import url="index.jsp"></c:import>
redirect:相当于 response.sendRedirect("") 有个param属性 跟在?后面
语法:<c:redirect url="testJSTL06.jsp">
<c:param name="name">zhangsan</c:param>
</c:redirect>
fn标签库:自己测试其方法
fmt标签库:
重点记住:formatDate和formatNumber