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 ...
随机推荐
- 匿名方法与Lambda表达式
1.匿名方法 在学习委托时,我们知道委托实例至少要绑定一个方法才能使用,而调用委托实际上是调用了它所关联地方法.一般来说,需要定义一个与委托签名相符的方法,并使之与委托变量关联.如以下代码: Acti ...
- ASP.NET MVC入门之再不学习就真的out了
听说最近又出了什么SAM,MVC辉煌即将过去,惊了我一身冷汗,ASP.NET MVC是啥都还没搞明白呢 于是赶紧打开ASP.NET官网学习学习,欢迎各位高手大侠来指点指点
- 关于SQL Server 安装程序在运行 Windows Installer 文件时遇到错误
前几日安装sql server2008r2 的时候碰到这个问题: 出现以下错误: SQL Server 安装程序在运行 Windows Installer 文件时遇到错误. Windows Insta ...
- ios 学习笔记之控件属性
1.文本框 设置密码属性:Secure Text Entry 勾选; 设置文本框带清除属性: Clear Button =Is always visible; 默认是不带清除属性:Never app ...
- overflow
1. 隐藏x轴滚动条,垂直有滚动条: <body> <div style="width:100px;height:150px;overflow:scroll;overflo ...
- Setting my home here
New here (For no chinese input on this machine, I have to use English.) Why do I choose here ? Whene ...
- Python默认版本修改
Python默认版本修改 当电脑安装了多个版本的Python,而Shell中默认的Python不是你想要的,这个时候就需要对Python的默认版本进行修改. 在Windows中,可以通过修改环境变量的 ...
- 使用KMP算法判断是否为旋转词
假设有两个字符串A.B,要判断它们是否为旋转词,只需构造一个"A+A"字符串,再与B比较,若B为A的旋转词,则使用KMP算法是可以得到结果的 代码如下: import java.u ...
- float包裹性与破坏性及清除浮动几种方法
1. “清除浮动” ??准确的描述应该是“清除浮动造成的影响” 学习视频录制推荐的教程<CSS深入理解之float浮动> 2.如何清除浮动造成的影响??? 栗子 块级div元素包含一个内 ...
- JS 预解释相关理解
1.JS中的内存空间分为两种:栈内存.堆内存 栈内存:提供JS代码执行的环境;存储基本数据类型的值; ->全局作用域或者私有的作用域其实都是栈内存 堆内存:存储引用数据类型的值(对象是把属性名和 ...