Java使用JSP Tag Files & JSP EL Functions打造你自己的页面模板
1. 简单说明:
在JSP 2.0后, 你不再需要大刀阔斧地定义一堆TagSupport或BodyTagSupport, 使用JSP Tag Files技术可以实现功能强大的页面模板技术. 在这里抛砖引玉, 结合项目开发, 简单介绍Tag Files技术的应用. 至于详细教程与资料, 请大家参考Java EE Tutorial, 上面有详细的E文资料.
http://docs.oracle.com/javaee/5/tutorial/doc/bnama.html
2. 定义模板:/WEB-INF/tags/subView.tag
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <!--
- <%@ tag language="java" pageEncoding="UTF-8" isELIgnored="false"%>
- <%@ taglib prefix="tags" tagdir="/WEB-INF/tags/"%>
- <%@ attribute name="id" required="true"%>
- <%@ attribute name="title" required="false"%>
- <%@ attribute name="headStyle" required="false" fragment="true"%>
- <%@ attribute name="headScript" required="false" fragment="true"%>
- <%@ attribute name="body" required="false" fragment="true"%>
- <%@ attribute name="footScript" required="false" fragment="true"%>
- -->
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <tags:header />
- <!-- 自定义css部分 -->
- <jsp:invoke fragment="headStyle" />
- <!-- 自定义js部分 -->
- <jsp:invoke fragment="headScript" />
- </head>
- <body class="pbody" id="approveApply">
- <div class="mainhd">
- <p class="maintit">${title}</p>
- </div>
- <div id="__body__">
- <!-- 自定义body -->
- <jsp:invoke fragment="body" />
- </div>
- <jsp:invoke fragment="footScript" />
- <div id="__footer__">
- <tags:footer version="${version}" />
- </div>
- </body>
- </html>
复制代码
其中, <tags:header>是头部模板, <tags:footer>是底部模板, 小模板再整合到大的<tags:subView>模板
2. 继承模板, 实现具体页面: /view/deploy/approveApply.jsp
- <?xml version="1.0" encoding="UTF-8" ?>
- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
- <%@ taglib prefix="tags" tagdir="/WEB-INF/tags/"%>
- <%@ taglib prefix="app" uri="http://risecloud.com/app"%>
- <tags:subView id="approveApply" title="审核请求">
- <jsp:attribute name="body">
- <div id="mainGrid"></div>
- </jsp:attribute>
- <jsp:attribute name="footScript">
- <!-- 覆盖页面样式类 -->
- <script type="text/javascript" src="${pageContext.request.contextPath}/js/deploy/ApproveApplyGrid.js?${app:pageVersion()}"></script>
- <script type="text/javascript" src="${pageContext.request.contextPath}/js/deploy/ApproveApplyDialog.js?${app:pageVersion()}"></script>
- <script type="text/javascript">
- //<![CDATA[
- $(function() {
- var grid = ApproveApplyGrid.create({
- selector : '#mainGrid',
- url : window.getCctxUrl('/deploy/approveApply!listGameApply'),
- agree : function(ret) {
- alert('agree')
- },
- deny : function(ret, rec) {
- alert('agree')
- }
- });
- });
- //]]>
- </script>
- </jsp:attribute>
- </tags:subView>
复制代码
其中:
1. id, title, body, footScript等分别是在<tabs:subView>中的模板区域, 这里逐一替换.
2. ${app:pageVersion()}是自定义的JSP EL Function, 在新版本发布时, 可以迫使用户浏览器更新缓存. 具体定义为/WEB-INF/app.tld,
- <?xml version="1.0" encoding="UTF-8"?>
- <taglib xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-jsptaglibrary_2_1.xsd" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.1">
- <tlib-version>1.0</tlib-version>
- <jsp-version>2.1</jsp-version>
- <short-name>app</short-name>
- <uri>http://risecloud.com/app</uri>;
- <display-name>app</display-name>
- <function>
- <name>pageVersion</name>
- <function-class>com.yy.game.risecloud.taglib.RiseCloundFunctionLib</function-class>
- <function-signature>java.lang.String pageVersion()</function-signature>
- </function>
- </taglib>
复制代码
注意EL Function都必须static
3. 具体效果: 图中红线框外的是模板, 红线框内是继承模板的页面实现, 既统一, 又省事. 这不是你梦寐以求的么?
注意:
1. JSP Tag Files默认放在/WEB-INF/tags/目录, 使用文件名直接引用. 如果其他地方, 必须在web.xml中使用<jsp-config>声明!
2. JSP EL Functions的tld默认放在/WEB-INF/下面, 如果其他地方, 必须在web.xml中使用<jsp-config>声明!
这二者如果放在默认位置, 在Servlet容器启动时会自动加载. 无需再配置什么! 具体使用, 大家可以参考Java EE Tutorial
Java使用JSP Tag Files & JSP EL Functions打造你自己的页面模板的更多相关文章
- Java第三阶段学习(十四、JSP动态页面、EL表达式、JSTL标签库)
一.JSP技术 1.jsp脚本和注释 jap脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部,比如写在doget.dopost 内的代码 2) ...
- JSTL的全称:JSP Standard Tag Library, jsp 标准标签库
JSTL的全称:JSP Standard Tag Library, jsp 标准标签库 JSTL的作用 提供给Java web开发人员一个标准通过的标签函数库和EL来取代传统直接在页面上嵌入j ...
- JSP运行过程 JSP脚本 静态动态包含 jsp指令 jsp内置对象jsp四大作用域 jsp动作元素 EL表达式 JSTL 设计模式 JSP开发模式 EL内置对象
Day38 JSP JSP的运行过程具体如下: (1)客户端发出请求,请求访问JSP文件. (2)JSP容器先将JSP文件转换成一个Java源文件(Java Servlet源程序),在转换过程中,如果 ...
- Java基础83 JSP标签及jsp自定义标签(网页知识)
1.JSP标签 替代jsp脚本,用于jsp中执行java代码1.1.内置标签: <jsp:forward></jsp:forward> 相当于:request.getReu ...
- jsp tag 直接文件实现
引入 <%@ taglib prefix="sys" tagdir="/WEB-INF/tags/sys" %> 这里注意/WEB-INF/tags ...
- JavaWeb——JSP表达式语言(EL)
1.JSP表达式语言(EL)用于在jsp从访问存储在JavaBean中的数据,例如 User ID: ${user.userId}<br /> 这里的${user.userId}就是JSP ...
- Liferay JSP Tag Libraries介绍
Liferay自带了很多标签库,这极大地提高了开发Liferay项目的效率. 下面让我们一起来探索吧. 什么是标签库? 什么是JSP标签? 什么是JSTL? 标签库由下面这几部分组成: Tag Lib ...
- JavaWeb学习之JSP常用标签、EL表达式的运算符、JSTL标签库(6)
1.JSP常用标签 * 只要支持JSP文件,常用标签有可以直接使用 * 格式: jsp:xxxx * jsp:forward ,完成jsp页面的转发 * page属性:转发的地址 <% requ ...
- JSP、JSTL、EL
Jsp Jsp内置对象: Response.Request.Page.pageContext.session.out.application.exception.config Out->jspW ...
随机推荐
- Java基础——IO流
今天刚刚看完java的io流操作,把主要的脉络看了一遍,不能保证以后使用时都能得心应手,但是最起码用到时知道有这么一个功能可以实现,下面对学习进行一下简单的总结: IO流主要用于硬板.内存.键盘等处理 ...
- android 3D旋转效果实现
一说到3D,可能第一反应就是使用OpenGL ES....但是,实现这么个小功能,要动用这玩意,莫名的恐惧啊!!!!至今也没弄明白这个怎么玩... 好吧,幸亏还有个Camera类可以帮助我们,据说底层 ...
- php获取文件创建时间、修改时间
filemtime ( string filename ) 返回文件上次被修改的时间,出错时返回 FALSE.时间以 Unix 时间戳的方式返回,可用于 date(). 例如:$a=filemtime ...
- 5 Ways to Learn and Remember Absolutely Anything
http://www.inc.com/quora/5-ways-to-learn-and-remember-absolutely-anything.html Start too early on th ...
- 让内层Div将外层Div撑开
在CSS排版中,如果一个层中的层使用了float浮动的话,那么就有可能会出现外层没有被内层撑开的情况,如以下代码所示: <div style="width:300px; "& ...
- JS常用的设计模式(17)—— 状态模式
状态模式主要可以用于这种场景 1 一个对象的行为取决于它的状态 2 一个操作中含有庞大的条件分支语句 回想下街头霸王的游戏. 隆有走动,攻击,防御,跌倒,跳跃等等多种状态,而这些状态之间既有联系又互相 ...
- c++ builder TListView控件按字符串排序(根据网上代码亲测ok)
//--------------------------------------------------------------------------- /* 首先将一个列表框控件安放在Form上, ...
- Android IOS WebRTC 音视频开发总结(二七)-- whatsapp之转发优先
最近看了一篇老外在webrtcHacks上写的文章,主要介绍webrtc和whatsapp的传输机制,蛮好的,加上自己的理解进行总结, 希望对大伙有所帮助,转载请说明出处,原文来自博客园RTC.Bla ...
- 淮安团购网美团联盟网赚版 v5.7
淮安团购网,主要是利用美团联盟的hao123版API大家可以注册http://union.meituan.com获取api 核心采用dede5.7所以在安装上没有大的问题,安装好后后台恢复备份就可以了 ...
- nginx负载均衡配置一(反向代理)
一.前提 1:系统linux(centos) 2:nginx代理服务器(web:192.168.1.10 proxy.abc.com) 3:nginx后台服务器(web1:192.168.1.11 ...