关于jstl的使用
1、jsp中el表达式无法被解析
使用jstl标签的时候,发现el表达式无法被解析,后来查阅资料发现jsp中需要添加<%@page isELIgnored="false" %>,表示是否忽略el表达式,当然是false,不允许。
但是归结到底,罪魁祸首还是在idea编译器,他生成的web.xml竟然是2.3版本的,在没有添加<%@page isELIgnored="false" %>的情况下,更改web.xml的版本也是一个办法
1 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 4 http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 5 version="3.1">
如上将web版本改成2.3以上即可。因为2.3本身不默认支持el表达式解析。
2.jstl标签属性整理:
核心标签:<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>也是最常用的
c:forEach 的 varStatus属性解析
varStatus属性 类型:String 描述:循环的状态信息,可以取值index\count\first\last\current
不可以使用EL表达式我们常使用<c:forEach>标签来遍历需要的数据,为了方便使用,varStatus属性可以方便我们实现一些与行数相关的功能,如:奇数行、偶数行差异;最后一行特殊处理等等。varStatus属性常用参数如下:
current:当前这次迭代的(集合中的)项
index:当前这次迭代从 0 开始的迭代计数
count:当前这次迭代从 1 开始的迭代计数
first:用来表明当前这轮迭代是否为第一次迭代的标志,返回true/false
last:用来表明当前这轮迭代是否为最后一次迭代的标志,返回true/false
格式化标签:<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>用于格式化时间,日期和数字等信息
标准函数:<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 通用字符串处理函数
3、jstl的使用
3.1如何通过servlet将数据传到jsp页面呢?
1 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 2 List mlist = new ArrayList(); 3 mlist.add("test1"); 4 mlist.add("test2"); 5 mlist.add("test3"); 6 mlist.add("test4"); 7 mlist.add("test5"); 8 req.setAttribute("mlist",mlist); 9 // resp.getWriter().append(((List<String>)req.getAttribute("mlist")).get(1)); 10 Map<String ,String> mMap = new HashMap<String, String>(); 11 mMap.put("key1","value1"); 12 mMap.put("key2","value2"); 13 mMap.put("key3","value3"); 14 mMap.put("key4","value4"); 15 req.setAttribute("map",mMap); 16 req.getRequestDispatcher("/").forward(req,resp); 17 }
主要使用req.setAttribute(key,value) 设置请求参数用于jsp页面展示,然后使用req.getRequestDispatcher("/").forward(req,resp);转发请求将内容提交到jsp页面。注意:此处不能使用resp.sendRedirect("/");因为使用响应重定向转发请求的话,并不携带当前servlet数据,只是单纯的请求转发,那样jsp页面无法收到request的数据。
- forward:请求转发,也就是将A向B请求数据,B直接将A的请求转发给C。
- redirect:请求重定向,A向B请求数据,B告诉A应该找C,那么A重新向C发起请求。
对比图:(左:请求转发,右:请求重定向)
3.2通过jstl展示
1 <ul> 2 <li>list方式</li> 3 <c:forEach items="${mlist}" var="l" varStatus="vs"> 4 <li style="list-style: none">${l}=>${vs.first}=>${vs.count}=>${vs.index}</li> 5 </c:forEach> 6 7 <li>map方式</li> 8 <c:forEach items="${map}" var="m" varStatus="vs"> 9 <li style="list-style: none">${m.key}=>${m.value}</li> 10 </c:forEach> 11 </ul>
结果展示:
此处如果出现el表达式无法解析的情况,可参考第一条。