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>

展现结果

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

JSTL、EL的一些实践记录的更多相关文章

  1. Spring Boot 2 实践记录之 封装依赖及尽可能不创建静态方法以避免在 Service 和 Controller 的单元测试中使用 Powermock

    在前面的文章中(Spring Boot 2 实践记录之 Powermock 和 SpringBootTest)提到了使用 Powermock 结合 SpringBootTest.WebMvcTest ...

  2. Spring Boot 2 实践记录之 使用 ConfigurationProperties 注解将配置属性匹配至配置类的属性

    在 Spring Boot 2 实践记录之 条件装配 一文中,曾经使用 Condition 类的 ConditionContext 参数获取了配置文件中的配置属性.但那是因为 Spring 提供了将上 ...

  3. Spring Boot 2 实践记录之 MyBatis 集成的启动时警告信息问题

    按笔者 Spring Boot 2 实践记录之 MySQL + MyBatis 配置 中的方式,如果想正确运行,需要在 Mapper 类上添加 @Mapper 注解. 但是加入此注解之后,启动时会出现 ...

  4. Ionic3项目实践记录

    Ionic3首次项目实践记录 标签(空格分隔): Angular Ionic Ionic3踩坑 1. 路由懒加载(lazy load) 如果设置了懒加载,就必须全部懒加载(包括TabsPage),否则 ...

  5. k8s1.4.3安装实践记录(2)-k8s安装

    前面一篇已经安装好了ETCD.docker与flannel(k8s1.4.3安装实践记录(1)),现在可以开始安装k8s了 1.K8S 目前centos yum上的kubernetes还是1.2.0, ...

  6. ElasticSearch5.0+版本分词热更新实践记录

    前言 刚开始接触ElasticSearch的时候,版本才是2.3.4,短短的时间,现在都更新到5.0+版本了.分词和head插件好像用法也不一样了,本博客记录如何配置Elasticsearch的Hea ...

  7. 9-2、大型项目的接口自动化实践记录----递归判断两个json串是否相等

    1.已知json串构成的情况下判断 先构造一下场景,假设已经把各个数据都移除掉不对比的字段 图1 预期.实际结果,复杂接口返回多层嵌套json时,同下 图2 预期.实际结果值为:{child_json ...

  8. 9-1、大型项目的接口自动化实践记录----数据库结果、JSON对比

    上一篇写了如何从DB获取预期.实际结果,这一篇分别对不同情况说下怎么进行对比. PS:这部分在JSON对比中也适用. 1.结果只有一张表,只有一条数据 数据格式:因为返回的是dicts_list的格式 ...

  9. 8、大型项目的接口自动化实践记录----DB分别获取预期结果、实际结果

    上一篇实现数据分离升级版--从DB获取数据,以及对应的请求实现,作为一个case,还缺少了预期结果与实际结果的获取及对比.因为前面的文章已经说过接口返回值的获取及对比,所以这篇不说这块了,这篇说一下D ...

随机推荐

  1. hdu 4865 Peter&#39;s Hobby(概率dp)

    http://acm.hdu.edu.cn/showproblem.php? pid=4865 大致题意:有三种天气和四种叶子状态.给出两个表,各自是每种天气下叶子呈现状态的概率和今天天气对明天天气的 ...

  2. sonarqube 指定jdk

    D:\sonarqube-6.3\conf\wrapper.conf wrapper.java.command=D:/other/jdk1.8.0_25/bin/java

  3. 〖Linux〗Ubuntu 64位安装sqlite3_analyzer

    1. 安装过程 -dev:i386 wget -c "http://www.sqlite.org/2013/sqlite-analyzer-linux-x86-3080200.zip&quo ...

  4. Google Volley框架之https请求

    先插一句.Google出的volley框架本身是支持https请求的,可是仅仅是针对有第三方机构认证过的. 假设自己随便在网上搞的一个证书,那volley是不支持请求的. 本文讲下怎样让volley支 ...

  5. MySQL5.7 二进制源码包安装

    一般平时安装MySQL都是源码包安装的,但是由于它的编译需要很长的时间,所以建议安装二进制免编译包.可以到MySQL官方网站去下载,也可以到comsenz官方网站下载,还有各大镜像站下载. 下载安装包 ...

  6. jsp引入js文件

    转自:http://blog.csdn.net/ppzhangj/article/details/7859628 1)引入的js文件出错, 检查方法:将Js的内容写在当前的页面的<script& ...

  7. oracle中的一些基本概念

    Oracle数据库的物理文件是存储在磁盘上的数据文件.控制文件和日志文件的总称.数据文件和日志文件是数据库中最重要的文件.数据库由若干个表空间组成,表空间由表组成,表由段组成,段由区间组成,区间由数据 ...

  8. 查看python selenium 的api

    DOS窗口输入: python -m pydoc -p 4567 python -m pydoc : 打开pydoc模块,pydoc是查看python文档的首选工具 -p 4567: 在4567端口启 ...

  9. 转 HTTP协议 (四) 缓存

    转自:http://www.cnblogs.com/TankXiao/archive/2012/11/28/2793365.html 缓存的概念 缓存这个东西真的是无处不在, 有浏览器端的缓存, 有服 ...

  10. django中数据库的相关操作

    一.使用环境 python2.7,django>1.7 二.数据库进行配置 在setting文件中进行修改 1.找到DATABASES DATABASES = { 'default': { 'E ...