java占位符填充_实现java中的占位符
学习过.net MVC 的同学,都知道其中用一个文件share /_Layout.cshtml,它主要实现的是一个类似母版页(可以参照word的母版)的功能,那么在javaee中是否有类似的功能呢?其实javaee 提供了一个包含页面的动作:
它能引入一些公共的部分,但是如果公共的地方不止一处,则需要写很多的类似语句。有没有一个类似.net中母版页的功能呢?据我现在所知,javaee中是没有的,当初我遇到高重复的页面时,百度了很久,终于在一个技术blog中找到实现该功能的demo,由于时间太久已经忘记在哪找到,如果我接下来写的侵犯了原作者权益,看见立删。
想实现这个功能要有以下文件:
1:BlockTag.java:
2: OverwriteTag.java
3:MyTag.tld
4:web.xml
5:_Layout.jsp
1,2两个文件放在src下的一个包中如:com.**.util
3放在web-inf 下
1:BlockTag.javaimport java.io.IOException;
import javax.servlet.ServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
import org.apache.commons.lang.StringUtils;
public class BlockTag extends BodyTagSupport {
/**
* 占位模块名称
*/
private String name;
private static final long serialVersionUID = 1425068108614007667L;
@Override
public int doStartTag() throws JspException{
return super.doStartTag();
}
@Override
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) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// TODO Auto-generated method stub
return super.doEndTag();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2:OverwriteTag.java
import javax.servlet.ServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;
import org.apache.commons.lang.StringUtils;
/**
* 自定义标签,用于在jsp模板中重写指定的占位内容
*
* 基本原理:
* 将overwrite标签内容部分添加到ServletRequest的attribute属性中
* 在后续block标签中再通过属性名读取出来,将其渲染到最终的页面上即可
*
*
*/
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 {
// TODO Auto-generated method stub
return super.doStartTag();
}
@Override
public int doEndTag() throws JspException {
ServletRequest request = pageContext.getRequest();
//标签内容
BodyContent bodyContent = getBodyContent();
request.setAttribute(PREFIX+name, StringUtils.trim(bodyContent.getString()));
// TODO Auto-generated method stub
return super.doEndTag();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
3:mytab<?xml version="1.0" encoding="utf-8"?>
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">
1.0
2.0
Mytag
mytag
block
com.wsbalance.util.BlockTag
jsp
name
true
true
java.lang.String
ouerwrite
com.**.util.OverwriteTag
jsp
name
true
true
java.lang.String
4:web.xml
web.xml中配置自定义标签
5:在share/_layout.jsp中写母版
母版页中(注意Layout:block>)
6:子页面中:
好了结束了,如果有不太懂的请留言哦,第一次写如有不足请多多关照!!
java占位符填充_实现java中的占位符相关推荐
- java word模版填充_[转载]java向word模板中填充数据(总结)
使用过PageOffice动态生成word文档的人都知道,PageOffice可以给word文档的指定位置进行填充,这里我们所说的指定位置在PageOffice的专业术语里面有两个概念,一个叫做数据区 ...
- java.lang.IllegalArgumentException: 字符[_]在域名中永远无效。 at
[http-nio-8080-exec-1] org.apache.coyote.AbstractProcessor.parseHost [xxx_tomcat] 是无效主机注意:更多的请求解析错误将 ...
- java项目----教务管理系统_基于Java的教务管理系统
java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...
- java xml dom4j 解析_在JAVA中怎么用DOM和DOM4j解析XML啊?
二.XML文件 三.开始解析 public class JDOMTest { public static void main(String[] args) { // 进行对books.xml文件的JD ...
- java怎么缓存行填充_为什么java的Exchanger.Slot缓存行填充像这样?
当我在 java中阅读'虚假共享'机制时,我在java.util.concurrent.Exchanger.Slot中找到以下代码 /** * A Slot is an AtomicReference ...
- java 内嵌机制_[转] Java中public,private,final,static等概念的解读
作为刚入门Java的小白,对于public,private,final,static等概念总是搞不清楚,到底都代表着什么,这里做一个简单的梳理,和大家分享,若有错误请指正,谢谢~ 访问权限修饰符 pu ...
- java 线程组作用_浅析Java中线程组(ThreadGroup类)
一.概念 Java中使用ThreadGroup类来代表线程组,表示一组线程的集合,可以对一批线程和线程组进行管理.可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程组,组中还可以有线 ...
- java try catch嵌套_解析Java中未被捕获的异常以及try语句的嵌套使用
Java未被捕获的异常 在你学习在程序中处理异常之前,看一看如果你不处理它们会有什么情况发生是很有好处的.下面的小程序包括一个故意导致被零除错误的表达式. class Exc0 { public st ...
- java 文件内容排序_在Java中对2个大型文本文件进行排序的最佳方法是什么?
我正在构建一个简单的 Java应用程序,涉及从csv文件中读取信息. csv文件中的信息以这种形式出现: "ID","Description" "AB ...
最新文章
- ROS nodelet的使用
- 深入浅出 MyBatis 的一级、二级缓存机制
- Zend Framework数据库操作
- [精华] 数据库的查询优化技术
- IOS高级开发 runtime(一)
- 等值线在Google Map上的叠加Extent
- android studio串号,AndroidStudio使用常见问题集锦
- java泛型(二)、泛型的内部原理:类型擦除以及类型擦除带来的问题
- 磁盘分区格式FAT32与NTFS
- Hacking techniques automation
- Dapr微服务应用开发系列0:概述
- aspen plus大小_[软件]Aspen Plus 这些常识,你都懂了吗?
- Opencv打开相机,并在上面用鼠标画框
- 5G学习笔记之RRC_IDLE/RRC_INACTIVE态UE功能概述
- 数据安全对物联网越来越重要
- 从一杯果汁浅谈点点医生充值提现模块设计
- android系统蓝牙音箱功能吗,Android蓝牙开发系列文章-其实你的手机可以变成一个蓝牙音箱...
- Javascript捕捉(capturing)与冒泡(bubbling)的区别
- 【逻辑思维训练 二】系统思维训练
- Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsEx