jsp2.0+中的标签文件,JSP Fragment技术
刚进新公司不久,今天在看到项目中用到了.tag文件。刚开始我还以为这个是第三方类似freemarker的模板技术。问了下项目组的其他人员,原来这是jsp2.0以来就有的JSP Fragment技术。以前做项目的时候从来没有用这样的方式,要公用就用用jsp中的include和jsp:include的方式。其实JSP Fragment也有include的作用,但是它更像第三方sitemesh技术,用于网页布局和修饰,可以将网页的内容和页面的结构分离,从而达到页面结构共享的目的。下面的例子来说明怎么使用jsp fragment。
官方E文参考文档http://docs.oracle.com/javaee/5/tutorial/doc/bnama.html
DEMO
1 首先在项目的WEB-INF/tags文件中,新建如下内容的tpl.tag文件
<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ attribute name="title"%>
<%@ attribute name="tpl1" fragment="true" required="true"%>
<%@ attribute name="tpl2" fragment="true" required="true"%>
<%@ attribute name="tpl3" fragment="true" required="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>${title}</title>
<style type="text/css">
#div1,#div2,#div3{
width:90%;
margin:10px auto;
border:10px solid red;
}
</style>
</head>
<body>
<h1>jsp2.0标签文件</h1>
<div id="div1">
<jsp:invoke fragment="tpl1"/>
</div>
<div id="div2">
<jsp:invoke fragment="tpl2"/>
</div>
<div id="div3">
<jsp:invoke fragment="tpl3"/>
</div>
<h2>jsp2.0 fragment技术</h2>
</body>
</html>
2 创建index.jsp 文件
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="xjo" tagdir="/WEB-INF/tags"%>
<xjo:tpl title="jsp标签文件的使用">
<jsp:attribute name="tpl1">
<h1>tpl1中的内容</h1>
</jsp:attribute>
<jsp:attribute name="tpl2">
<h1>tpl2中的内容</h1>
</jsp:attribute>
<jsp:attribute name="tpl3">
<h1>tpl3中的内容</h1>
</jsp:attribute>
</xjo:tpl>
3 访问index.jsp页面,效果如下
具体说明
标签文件说明
标签文件必须存放在WEB-INF目录下,最好是在WEB-INF目录下再新建一个tags目录,然后将所有的标签文件都存放在这里。标签文件可以使用所有的JSP元素,但是不能使用page指令,标签文件多个一个tag指令
标签文件中隐藏对象
标签文件中指令
tag指令
<%@ tag 属性1="属性值" 属性2="属性值" …属性n="属性值"%>
在一个Tag文件中可以使用多个tag指令,因此我们经常使用多个tag指令为属性指定需要的值:
<%@ tag 属性1="属性值"%>
<%@ tag 属性2="属性 值"%>
<%@ tag 属性n="属性值"%>
<%@ tag language="java"
pageEncoding=""
body-content="scriptless|empty|tagdependent"
deferredSyntaxAllowedAsLiteral="false"
description=""
display-name=""
dynamic-attributes=""
example=""
import=""
isELIgnored="false"
large-icon=""
small-icon=""
trimDirectiveWhitespaces="false"
%>
include 指令
<%@include file="" %>
attribute指令
<%@ attribute name=""
description=""
fragment="false"
required="false"
rtexprvalue="true"
type=""
%>
variable指令
<%@ variable alias=""
declare="true"
description=""
name-from-attribute=""
name-given=""
scope="NESTED|AT_BEGIN|AT_END"%>
标签文件中的jsp:invoke
<jsp:invoke fragment=""
var=""
scope="page|request|session|application"
varReader=""/>
var - 给出变量名, 把片段经过 jsp 容器计算过之后的结果作为字符串保存.
varReader - 同上, 不过将结果作为一个 java.io.Reader 保存.
scope - 作用域
jsp2.0+中的标签文件,JSP Fragment技术的更多相关文章
- VC++ 6.0中添加库文件和头文件
附加头文件包含 VC6.0中: VC6.0默认include包含路径:Tools>Options>Directories>Include files. 对于特定项目的头文件包含,在& ...
- VC6.0中添加库文件和头文件
附加头文件包含 VC6.0中: VC6.0默认include包含路径:Tools>Options>Directories>Include files. 对于特定项目的头文件包含,在“ ...
- VC 6.0中添加库文件和头文件 【转】
本文转载自:http://blog.sina.com.cn/s/blog_9d3971af0102wxjq.html 加头文件包含 VC6.0中: VC6.0默认include包含路径:Tools&g ...
- 在MS CRM 4.0中引用JS文件
引用: http://blog.csdn.net/qzw4549689/article/details/6027987 1.编写好JS代码,在ISV目录下新建一个目录javascripts,将JS文件 ...
- 在.net core 2.0中生成exe文件
.net core 2.0程序默认生成的是一个dll,需要通过dotnet命令来执行他. dotnet ConsoleApp1.dll 这种方式有点类似于java程序.本身这种方式没有什么问题,但在调 ...
- Json-server在Vue 2.0中使用--build文件中没有dev-server文件
跟大佬的视频使用json-server模拟后台数据调用,发现build文件中并没有dev-server.js. 新版的vue-cli取消了dev-server.js和dev-client.js 改 ...
- 在VC6.0中编译头文件时产生moc文件
1.在FileView视图中 右键点击需要产生moc文件的头文件(就是类中包含Q_OBJECT宏,如果没有这个宏就不需要产生moc文件) 2.在右键菜单中选择Setting... 3.选择Custom ...
- Activity中通过标签获取当前Fragment
初始化完成之后才有数据,否则获取不到 String tag = "android:switcher:"+viewPager.getId()+":"+viewPa ...
- JSP2.0自定义标签
JSP1.0中可以通过继承TagSupport或者BodyTagSupport来实现自定义的tag处理方法. JSP2.0中也支持另外一种更为简单的自定tag的方法,那就是直接讲JSP代码保存成*.t ...
随机推荐
- 创建ASP.NET Core MVC应用程序(4)-添加CRUD动作方法和视图
创建ASP.NET Core MVC应用程序(4)-添加CRUD动作方法和视图 创建CRUD动作方法及视图 参照VS自带的基架(Scaffold)系统-MVC Controller with view ...
- Sublime插件支持Sass编译和Babel解析ES6 & .sublime-build文件初探
用Sublime Text蛮久了,配置配来配去的,每次换电脑都得重头再配过,奈何人老了脑子不中用了,得好好整理一些,下次换电脑就有得参考了.. 同事说,他的WebStorm简直太方便,自身集成了很多方 ...
- Windows 10 密钥分享
Windows 10 Technical Preview for Enterprise:KEY:PBHCJ-Q2NYD-2PX34-T2TD6-233PKhttp://technet.microsof ...
- jQuery获取Select选中的Text和Value
获取Select选中的Text和Value语法解释:$("#select_id").change(function(){//code...}); // 为Select添加事件, ...
- .net源码分析 – List<T>
通过分析源码可以更好理解List<T>的工作方式,帮助我们写出更稳定的代码. List<T>源码地址: https://github.com/dotnet/corefx/blo ...
- JDK源码分析:hashCode()方法
提问: 1.hashCode()源码是怎么实现的. 2.hashCode()是为了配合基于散列的集合而设计的 3.hash数据结构,如何做到存取的时间复杂度为O(1)的.{函数算>逐个比较} 答 ...
- ZKUI中文编码以及以docker方式运行的问题
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- LZW压缩算法——简明原理与实现
LZW和哈夫曼编码一样,是无损压缩中的一种.该算法通过建立字典,实现字符重用与编码,适用于source中重复率很高的文本压缩.本文首先讲下LZW的编解码原理,然后给出LZW的实现code. ***** ...
- 2016年4月最佳的20款 jQuery 插件推荐
这个列表包括20个我们觉得是最有用的免费的 jQuery 插件,它们都是最具创新性和最省时省力的解决方案,很多都是现代化的设计和开发中碰到的问题的处理方案.如果你熟悉下面列出的任何插件,请与我们的读者 ...
- CSS3中flexbox如何实现水平垂直居中和三列等高布局
最近这些天都在弥补css以及css3的基础知识,在打开网页的时候,发现了火狐默认首页上有这样一个东西.