java 模板继承_jsp模板继承

jsp通过自定义标签实现类似模板继承的效果

关于标签的定义、注册、使用在上面文章均以一个自定义时间的标签体现,如有不清楚自定义标签流程的话请参考这篇文章 http://www.cnblogs.com/zhuchenglin/p/8109787.html

关于jsp 的模板继承 请参考 这篇文章,上面的使用方法非常清楚,这里就不再说明

自定义标签实现类似模板继承的效果 参考

下面来看一下我的代码:

1. 在新建包 com.xiangmu.tags 中新建两个类,一个是 BlockTag.java,另一个是OverwriteTag.java,内容如下:

BlockTag.java占位标签

public class BlockTag extends BodyTagSupport {

/**

* 占位模块名称

*/

private String name;

private static final long serialVersionUID = 1425068108614007667L;

public int doStartTag() throws JspException{

return super.doStartTag();

}

public int doEndTag() throws JspException {

ServletRequest request = pageContext.getRequest();

//block标签中的默认值

String defaultContent = (getBodyContent() == null)?"":getBodyContent().getString();

String bodyContent = (String) request.getAttribute(OverwriteTag.PREFIX+ name);

//如果页面没有重写该模块则显示默认内容

bodyContent = StringUtils.isEmpty(bodyContent)?defaultContent:bodyContent;

try {

pageContext.getOut().write(bodyContent);

} catch (IOException e) {

e.printStackTrace();

}

return super.doEndTag();

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

OverwriteTag.java 重写标签

public class OverwriteTag extends BodyTagSupport {

private static final long serialVersionUID = 5901780136314677968L;

//模块名的前缀

public static final String PREFIX = "JspTemplateBlockName_";

//模块名

private String name;

public int doStartTag() throws JspException {

return super.doStartTag();

}

public int doEndTag() throws JspException {

ServletRequest request = pageContext.getRequest();

//标签内容

BodyContent bodyContent = getBodyContent();

request.setAttribute(PREFIX+name, StringUtils.trim(bodyContent.getString()));

return super.doEndTag();

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

2. 注册标签

在WEB-INF文件夹下写一个自定义标签的配置文件我的以mytags.tld为例:

/p>

PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"

"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

1.0

1.2

mt

http://xiangmu.com/mytags

block

com.xingmu.tags.BlockTag

name

true

true

overwrite

com.xingmu.tags.OverwriteTag

name

true

true

3. 使用示例

基础页面 menu.jsp

pageEncoding="UTF-8"%>

title

子页面 继承上面的基础页面 index.jsp

pageEncoding="UTF-8"%>

//写入要重写的内容

这样最终访问index.jsp时所显示的页面就是这两个页面的组合。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值