您的位置:首页 > 编程语言 > Java开发

Java jsp MasterPages实现母版页,实现统一风格的页面布局

2015-12-23 17:16 531 查看
http://outofmemory.cn/code-snippet/964/Java-jsp-MasterPages-achieve-muban-page-achieve-tongyi-fengge-page-layout


Java jsp MasterPages实现母版页,实现统一风格的页面布局

更多0

jsp

模板

java利用Tag实现类似.Net的母版页功能。

MasterPageTag.java
/**
*
*/
package org.lhp.core.tag;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;

/**
* TODO
*
* @Title : MasterPageTag.java
* @author liheping 2012-5-14 下午03:59:03
* @version : V1.0 2012-5-14
* @Copyright : Copyright ( c ) dev.liheping.org ,2012
*/
public class MasterPageTag extends BodyTagSupport {

private static final long serialVersionUID = 1L;

@Override
public int doAfterBody() throws JspException {
return SKIP_BODY;
}

@Override
public int doStartTag() throws JspException {
// 执行子标签
return EVAL_BODY_BUFFERED;
}

@Override
public int doEndTag() throws JspException {
JspWriter out = pageContext.getOut();
if (bodyContent != null) {
if (out instanceof BodyContent) {
out = ((BodyContent) out).getEnclosingWriter();
}
}
String content = this.bodyContent.getString();
try {
this.bodyContent.clear();
out.write(content);
} catch (IOException e) {
e.printStackTrace();
}
return SKIP_PAGE; // 不执行标签之后的内容
}
}


ContentPlaceHolderTag.java
/**
*
*/
package org.lhp.core.tag;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

/**
* TODO
* @Title : ContentPlaceHolderTag.java
* @author liheping 2012-5-14 下午03:33:01
* @version : V1.0 2012-5-14
* @Copyright  : Copyright  ( c ) dev.liheping.org ,2012
*/
public class ContentPlaceHolderTag extends TagSupport {
private static final long serialVersionUID = 1L;

@Override
public int doEndTag() throws JspException {
JspWriter out = pageContext.getOut();
Object obj = this.pageContext.getRequest().getAttribute(this.getId());
try {
if(obj!=null)
out.write(obj.toString());
} catch (IOException e) {
e.printStackTrace();
}
return EVAL_PAGE;
}

}


ContentPageTag.java
/**
*
*/
package org.lhp.core.tag;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;

import org.lhp.core.response.CustomResponse;

/**
* TODO
*
* @Title : ContentPageTag.java
* @author liheping 2012-5-14 下午04:00:47
* @version : V1.0 2012-5-14
* @Copyright : Copyright ( c ) dev.liheping.org ,2012
*/
public class ContentPageTag extends BodyTagSupport {
private final String masterFolderPath = "/WEB-INF/master/";
private final String masterPageSuffix = ".jsp";

private static final long serialVersionUID = 1L;

@Override
public void doInitBody() throws JspException {
try {
this.pageContext.getRequest().setCharacterEncoding("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
super.doInitBody();
}

@Override
public int doAfterBody() throws JspException {
return SKIP_BODY;
}

@Override
public int doStartTag() throws JspException {
//执行子标签
return EVAL_BODY_BUFFERED;
}

@Override
public int doEndTag() throws JspException {
JspWriter out = pageContext.getOut();
CustomResponse bufferedResponse = new CustomResponse((HttpServletResponse) this.pageContext.getResponse());
try {
System.out.println("master url :"+this.getMasterPageUrl());
//渲染页面
this.pageContext.getServletContext().getRequestDispatcher(this.getMasterPageUrl()).include(this.pageContext.getRequest(), bufferedResponse);
System.out.println("master page content : " + bufferedResponse.getContent());
//out.clearBuffer();
out.write(bufferedResponse.getContent());
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

return SKIP_PAGE;
}

/**
* TODO  获取母版
* @Title: getMasterPageUrl
* @return
* @return String
* @author liheping    2012-5-15  下午02:16:13
*/
private String getMasterPageUrl(){
return this.masterFolderPath+this.materPageId+this.masterPageSuffix;
}
private String materPageId;
public String getMaterPageId() {
return materPageId;
}

public void setMaterPageId(String materPageId) {
this.materPageId = materPageId;
}

}


ContentTag.java
/**
*
*/
package org.lhp.core.tag;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;

/**
* TODO
* @Title : ContentTag.java
* @author liheping 2012-5-14 下午04:01:16
* @version : V1.0 2012-5-14
* @Copyright  : Copyright  ( c ) dev.liheping.org ,2012
*/
public class ContentTag extends BodyTagSupport {
private static final long serialVersionUID = 1L;

@Override
public int doAfterBody() throws JspException {
return SKIP_BODY;
}

@Override
public int doStartTag() throws JspException {
return EVAL_BODY_BUFFERED;
}

@Override
public int doEndTag() throws JspException {
String content = this.bodyContent.getString();
try {
this.pageContext.getRequest().setAttribute(this.getContentPlaceHolderId(), content);
this.bodyContent.clear();
} catch (IOException e) {
e.printStackTrace();
}
return EVAL_PAGE;//default
}

private String contentPlaceHolderId;
public String getContentPlaceHolderId() {
return contentPlaceHolderId;
}
public void setContentPlaceHolderId(String contentPlaceHolderId) {
this.contentPlaceHolderId = contentPlaceHolderId;
}

}


CustomResponse.java
package org.lhp.core.response;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;

public final class CustomResponse extends HttpServletResponseWrapper {
private StringWriter strWriter = new StringWriter();
private PrintWriter out = new PrintWriter(strWriter) ;

public CustomResponse(HttpServletResponse response) {
super(response);
}

@Override
public PrintWriter getWriter() throws IOException {
return out;
}
public String getContent() {
return strWriter.toString();
}
}


master.jsp
<%@ taglib uri="org.lhp.masterpage" prefix="fms" %>
<fms:MasterPage id="master">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title><fms:ContentPlaceHolder id="title"/></title>
</head>
<body>
<hr/>
<h1>母版页内容.............</h1>
<fms:ContentPlaceHolder id="nav"/>
<hr/>
<fms:ContentPlaceHolder id="main"/>
<h2>母版页文字</h2>
<br/>
<br/>
<br/>
...........................
</body>
</html>
</fms:MasterPage>


index.jsp
<%@ taglib uri="org.lhp.masterpage" prefix="fms" %>
<fms:ContentPage materPageId="master">

<fms:Content contentPlaceHolderId="title">
子页,标题
</fms:Content>

<fms:Content contentPlaceHolderId="nav">
<h5>子页导航</h5>
</fms:Content>

<fms:Content contentPlaceHolderId="main">
<h3>子页主内容</h3>
</fms:Content>

</fms:ContentPage>


[Java]代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>bean</shortname>
<uri>org.lhp.masterpage</uri>
<tag>
<name>Content</name>
<tagclass>org.lhp.core.tag.ContentTag</tagclass>
<bodycontent>JSP</bodycontent>
<attribute>
<name>contentPlaceHolderId</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<tag>
<name>ContentPlaceHolder</name>
<tagclass>org.lhp.core.tag.ContentPlaceHolderTag</tagclass>
<bodycontent>JSP</bodycontent>
<attribute>
<name>id</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<tag>
<name>MasterPage</name>
<tagclass>org.lhp.core.tag.MasterPageTag</tagclass>
<bodycontent>JSP</bodycontent>
<attribute>
<name>id</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<tag>
<name>ContentPage</name>
<tagclass>org.lhp.core.tag.ContentPageTag</tagclass>
<bodycontent>JSP</bodycontent>
<attribute>
<name>materPageId</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: