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 { } }
用于测试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>
展现结果

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
资料参考:
- http://www.w3cschool.cc/jsp/jsp-jstl.html
- http://stackoverflow.com/questions/3978551/jstl-foreach-on-enum
作者:Nick Huang 博客:http://www.cnblogs.com/nick-huang/
本博客为学习、笔记之用,以笔记形式记录学习的知识与感悟。学习过程中可能参考各种资料,如觉文中表述过分引用,请务必告知,以便迅速处理。如有错漏,不吝赐教。
如果本文对您有用,点赞或评论哦;如果您喜欢我的文章,请点击关注我哦~
本博客为学习、笔记之用,以笔记形式记录学习的知识与感悟。学习过程中可能参考各种资料,如觉文中表述过分引用,请务必告知,以便迅速处理。如有错漏,不吝赐教。
如果本文对您有用,点赞或评论哦;如果您喜欢我的文章,请点击关注我哦~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用