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 ...
随机推荐
- 你的日志组件记录够清晰嘛?--自己开发日志组件 Logger
现在现成的日志组件实在是太多太多,为什么我还需要自己实现呢????? 需求来源于java的log4j, [07-31 16:40:00:557:WARN : com.game.engine.threa ...
- Linux上的SQL Server——预告片
大家可能都听说了,微软在几个星期前宣布发布可以在Linux上完整运行的SQL Server!如果你想看下在Linux上SQL Server如何运行,进行查询是什么样的体验,可以看下下面的视频.
- 故障恢复和恢复模式(Crash Recovery & Recovery Models)
数据库的恢复模型是否影响故障恢复,在简单恢复模式里,你是否会丢失事务?在今天的文章里我想谈下这点,详细讨论下. 恢复模式(Recovery Models) 对于这个问题的最简单的答案是不会:恢复模型不 ...
- Moon.Orm 5.0 (MQL版) 实际开发实例Demo
http://www.cnblogs.com/humble/p/4593133.html (文章新地址) http://www.cnblogs.com/humble/p/4593133.html ...
- Net设计模式实例之抽象工厂模式(Abstract Factory Pattern)
一.抽象工厂模式简介(Bref Introduction) 抽象工厂模式(Abstract Factory Pattern),提供一个创建一系列相关或者相互依赖对象的接口,而无需制定他们的具体类.优点 ...
- AngularJs $q promise
angularjs提供的$q服务是对Promises规范的一个实现.$q服务可以把一段异步的代码封装成同步的样式. 为啥是样式,因为异步还是异步,它并不会柱塞代码,只是看起来像同步代码. $q.whe ...
- 学习C#线程
2016-12-17 无意间看到了关于C#线程的讲解.经过一下午的学习后,慢慢的对线程也有了一定的理解.这里讲解的是最基础的内容,包括线程的创建.睡眠.等待.终止. 实验环境:Visual studi ...
- 尝试加载 Oracle 客户端库时引发 BadImageFormatException
尝试加载 Oracle 客户端库时引发 BadImageFormatException 工程师给计算机诊断,就像医生给病人诊断一样,很多同样的症状,可能是由多种截然不同的原因导致的. 最近进行C# ...
- centos mysql php Curl
开放80端口 #/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT #/sbin/iptables -I INPUT -p tcp --dport ...
- 12、ASP.NET MVC入门到精通——HtmlHelper
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 HtmlHelper:是为了方便View的开发而产生 HtmlHelper的演变 普通首页超级链接为:<a href="/h ...