新建文件
package com.augmentum.oes.taglib; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; import org.springframework.context.ApplicationContext; import com.augmentum.oes.common.BlockAbstract; import com.augmentum.oes.util.SpringUtil; public class BlockTaglib extends TagSupport{ private static final long serialVersionUID = -1485358775043610324L; private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public int doStartTag() throws JspException { return SKIP_BODY; } @Override public int doEndTag() throws JspException { ApplicationContext ctx = SpringUtil.getApplicationContext(); BlockAbstract block = (BlockAbstract) ctx.getBean(name); String content = block.dispalyBlock(pageContext); JspWriter out = pageContext.getOut(); try { out.println(content); } catch (Exception e) { e.printStackTrace(); } return EVAL_PAGE; } @Override public void release() { super.release(); } }
新建tld文件
<?xml version="1.0" encoding="UTF-8"?> <taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <description>oes 1.0 </description> <display-name>mxz</display-name> <tlib-version>1.0</tlib-version> <short-name>block</short-name> <uri>http://www.oes.com/tag/mxz</uri> <tag> <name>display</name> <tag-class>com.augmentum.oes.taglib.tagl</tag-class> <body-content>empty</body-content> <attribute> <name>name</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>
在页面中引入
<%@taglib prefix="block" uri="http://www.oes.com/tag/mxz" %>
对于block页面分块
公共类
package com.augmentum.oes.common; import java.io.IOException; import java.io.StringWriter; import java.io.Writer; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.PageContext; public abstract class BlockAbstract { public String template; public String getTemplate() { return template; } public void setTemplate(String template) { this.template = template; } public String dispalyBlock(PageContext pagecontext) { execute(pagecontext); HttpServletRequest request = (HttpServletRequest) pagecontext.getRequest(); Writer body = new StringWriter(); try { if (template != null && !template.trim().equals("")) { pagecontext.pushBody(body); pagecontext.include(template); pagecontext.popBody(); return body.toString(); } } catch (Exception e) { e.printStackTrace(); } finally { try { body.close(); } catch (IOException e) { e.printStackTrace(); } } return ""; } abstract protected void execute(PageContext pagecontext) ; }
要实现的传数据类
package com.augmentum.oes.block; import javax.servlet.jsp.PageContext; import com.augmentum.oes.common.BlockAbstract; public class QuestionInfoBlock extends BlockAbstract{ @Override protected void execute(PageContext pagecontext) { //get data; } }
通过spring获得
<bean id="questionInfoBlock" class="com.augmentum.oes.block.QuestionInfoBlock"> <property name="template" value="/WEB-INF/jsp/questions/question_list.jsp"></property> //这里可以注入其他需要的service </bean>
页面中调用