Java使用JSP Tag Files & JSP EL Functions打造你自己的页面模板
2016-09-07 13:47
357 查看
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
在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
相关文章推荐
- JSP页面使用EL表达式出现的问题:javax.el.PropertyNotFoundException: Property 'ID' not found on type java.lang.Str
- JSP页面<% ... %>中怎样使用out及其它
- jsp使用自定义标签taglib分页系列——ColumntextTag.java
- forward redirct 转向和重定向区别;通过el和java代码在jsp页面取出参数,jsp:param注意事项
- Java读取Excel内容&jsp页面内容导出到Excel中
- jsp使用自定义标签taglib分页系列——ListTag.java
- 使用Struts标签库,JSP页面报:java.lang.ClassNotFoundException: com.opensymphony.xwork2.util.TextUtils
- spring3 jsp页面使用<form:form modelAttribute="xxxx" action="xxxx">报错,附连接数据库的spring MVC annotation 案例
- Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core"
- struts2 jsp页面访问List, set 和<s:iterator>的使用
- jsp使用自定义标签taglib分页系列——ColumnbuttonTag.java
- Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/
- Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core"
- jsp使用自定义标签taglib分页系列——TRTag.java
- jsp使用自定义标签taglib分页系列——ColumneditTag.java
- jsp使用自定义标签taglib分页系列——ColumntextTag.java
- cannot find the tag library descriptor for "http://java.sun.com/jsp/jstl/core"
- jsp向页面显示图片,找不到文件时直接使用java画图
- myEclipse使用的一些小技巧(如java代码的模板配置,覆盖已在的括号,浏览jsp快捷配置)
- MyEclipse 出错提示 Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core"