JSTL、EL的一些实践记录

JSTL、EL是页面渲染比较常用的基础的技术。然而,因完成的项目大多是通过JSON或XML返回页面,然后Javascript渲染。

所以,JSTL、EL的使用语法,到现在也很不熟练,不可信手拈来。

借最近做页面的权限展现,用到他们,记录一些简单的实践。

 

所有数据在Servlet中设置(为了模拟实际情况),而非页面设置。

技术分享
package com.nicchagil.study.jstl;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class JSTLServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public JSTLServlet() {
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setAttribute("hello", "Nick Huang!");
        
        Function f1 = new Function("USER", "/user/main");
        Function f2 = new Function("ROLE", "/role/main");
        Function f3 = new Function("FUNCTION", "/role/main");
        
        List<Function> fl = new ArrayList<Function>();
        fl.add(f1);
        fl.add(f2);
        fl.add(f3);
        request.setAttribute("fl", fl);
        
        Map<String, Function> fm = new HashMap<String, Function>();
        fm.put("USER", f1);
        fm.put("ROLE", f2);
        fm.put("FUNCTION", f3);
        request.setAttribute("fm", fm);
        
        request.getRequestDispatcher("show.jsp").forward(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }

}
Servlet

 用于测试JSTL、EL的JSP页面

技术分享
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ page import="com.nicchagil.study.jstl.*"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>c:out</title>
</head>
<body>

c:out<br/>
打印常量:<c:out value="${‘`1234567890-=[]‘}"/><br/>
打印普通字符:<c:out value="${hello}"/><br/>
打印Map的key为USER的Value:<c:out value="${fm[‘USER‘]}"/><br/>
打印Map的key为XXX的Value:<c:out value="${fm[‘XXX‘]}"/><br/>

打印静态常量:
<c:set var="F3" value="<%=Constants.F3%>"/>
<c:out value="${F3}"/><br/>
打印Map的key为静态常量的Value:<c:out value="${fm[F3]}"/><br/>

<br/><br/><br/>

c:set and c:out<br/>
<c:set var="salary" value="${2000*2}" scope="session"/>
<c:out value="${salary}"/>

<br/><br/><br/>

c:forEach<br/>
打印List集合:<br/>
<c:forEach items="${fl}" var="i" varStatus="s">
    Item <c:out value="${s[‘index‘]}"></c:out> : <c:out value="${i}"/><br/>
</c:forEach><br/>
打印List集合字段:<br/>
1、要引入该JAVA类才能打印类细节<br/>
<c:forEach items="${fl}" var="i" varStatus="s">
    Item <c:out value="${s[‘index‘]}"></c:out> : <c:out value="${i.functionCode}"/> - <c:out value="${i.functionURL}"/><br/>
</c:forEach><br/>
打印Map集合字段:<br/>
<c:forEach items="${fm}" var="i" varStatus="s">
    Item <c:out value="${s[‘index‘]}"></c:out> : <c:out value="${i}"/> - <c:out value="${i.key}"/> - <c:out value="${i.value.functionURL}"/><br/>
</c:forEach><br/>
<br/>

<br/><br/><br/>

c:choose<br/>
<c:choose> 
    <c:when test="${not empty fm[F3]}">
        fm[F3] is not empty
    </c:when> 
    <c:otherwise>
        fm[F3] is not empty
    </c:otherwise> 
</c:choose>
<br/>
<c:choose> 
    <c:when test="${not empty fm[‘xxx‘]}">
        fm[‘xxx‘] is not empty
    </c:when> 
    <c:otherwise>
        fm[‘xxx‘] is empty
    </c:otherwise> 
</c:choose>
</body>
</html>
View Code

展现结果

技术分享
c:out
 打印常量:`1234567890-=[]
 打印普通字符:Nick Huang!
 打印Map的key为USER的Value:com.nicchagil.study.jstl.Function@1c7d56b
 打印Map的key为XXX的Value:
 打印静态常量: ROLE
 打印Map的key为静态常量的Value:com.nicchagil.study.jstl.Function@19c9f16



 c:set and c:out
 4000 


c:forEach
 打印List集合:
Item 0 : com.nicchagil.study.jstl.Function@1c7d56b
 Item 1 : com.nicchagil.study.jstl.Function@19c9f16
 Item 2 : com.nicchagil.study.jstl.Function@180f545
 
打印List集合字段:
 1、要引入该JAVA类才能打印类细节
Item 0 : USER - /user/main
 Item 1 : ROLE - /role/main
 Item 2 : FUNCTION - /role/main
 
打印Map集合字段:
Item 0 : FUNCTION=com.nicchagil.study.jstl.Function@180f545 - FUNCTION - /role/main
 Item 1 : ROLE=com.nicchagil.study.jstl.Function@19c9f16 - ROLE - /role/main
 Item 2 : USER=com.nicchagil.study.jstl.Function@1c7d56b - USER - /user/main
 




c:choose
 fm[F3] is not empty 
fm[‘xxx‘] is empty 
View Code

 

资料参考:

  • http://www.w3cschool.cc/jsp/jsp-jstl.html
  • http://stackoverflow.com/questions/3978551/jstl-foreach-on-enum

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。