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中的占位符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: epel源mysql版本_linux增加
- 下一篇: atomic 内存序_并行编程的内存顺序