新建文件

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) ; }

BlockAbstract

要实现的传数据类

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;
} }

QuestionInfoBlock

通过spring获得

    <bean id="questionInfoBlock" class="com.augmentum.oes.block.QuestionInfoBlock">
<property name="template" value="/WEB-INF/jsp/questions/question_list.jsp"></property>
//这里可以注入其他需要的service
</bean>

applicationcontext.xml

页面中调用

taglib block的更多相关文章

  1. echart四川地图

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  2. jsp中自定义Taglib案例

    一.使用TagSupport类案例解析 1.自定义Tag使用jdbc连接mysql数据库 1.1定义标签处理器类 package com.able.tag; import java.sql.Conne ...

  3. UWP平台Taglib编译(2)

    此文已由作者郑博授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验 #endif  // _WIN32 } class FileStream::FileStreamPrivate ...

  4. Objective-C中block的底层原理

    先出2个考题: 1. 上面打印的是几,captureNum2 出去作用域后是否被销毁?为什么? 同样类型的题目: 问:打印的数字为多少? 有人会回答:mutArray是captureObject方法的 ...

  5. iOS 键盘添加完成按钮,delegate和block回调

    这个是一个比较初级一点的文章,新人可以看看.当然实现这个需求的时候自己也有一点收获,记下来吧. 前两天产品要求在工程的所有数字键盘弹出时,上面带一个小帽子,上面安装一个“完成”按钮,这个完成按钮也没有 ...

  6. python中IndentationError: expected an indented block错误的解决方法

    IndentationError: expected an indented block 翻译为IndentationError:预期的缩进块 解决方法:有冒号的下一行要缩进,该缩进就缩进

  7. JDBC Tutorials: Commit or Rollback transaction in finally block

    http://skeletoncoder.blogspot.com/2006/10/jdbc-tutorials-commit-or-rollback.html JDBC Tutorials: Com ...

  8. 嵌入式&iOS:回调函数(C)与block(OC)传 参/函数 对比

    C的回调函数: callBack.h 1).声明一个doSomeThingCount函数,参数为一个(无返回值,1个int参数的)函数. void DSTCount(void(*CallBack)(i ...

  9. 嵌入式&iOS:回调函数(C)与block(OC)回调对比

    学了OC的block,再写C的回调函数有点别扭,对比下区别,回忆记录下. C的回调函数: callBack.h 1).定义一个回调函数的参数数量.类型. typedef void (*CallBack ...

随机推荐

  1. Foundation-常用结构体

    复习 void test(){ struct Date{ int year; int month; int day; }; struct Date d={2015,5,14}; d.day=6; } ...

  2. 常见的RuntimeException

    一般面试中java Exception(runtimeException )是必会被问到的问题常见的异常列出四五种,是基本要求.更多的....需要注意积累了 常见的几种如下: NullPointerE ...

  3. RuntimeException和Exception的区别

    1.java将所有的错误封装为一个对象,其根本父类为Throwable, Throwable有两个子类:Error和Exception. 2.Error是Throwable 的子类,用于指示合理的应用 ...

  4. 谷歌浏览器试调网页 多出font标签

    突然发现一些按钮的点击功能失效,在控制台发现该a标签中多出个font标签,导致文字区域不能触发到a标签 就算a标签宽高设置百分百 也没用. 经测试不同的浏览器情况不一样 safari就不会出现这种情况 ...

  5. strom部署问题

    1.storm 引用的 kafka和线上的kafka版本不一致 2.bolt的prepare初始化elasticsearch连接慢,导致第一次处理数据是总是有问题storm调用prepare方法是异步 ...

  6. Golang 二维切片初始化

    package main import "fmt" func main() { // 方法0 row, column := 3, 4 var answer [][]int for ...

  7. 感知机和BP神经网络

    一.感知机 1.感知机的概念 感知机是用于二分类的线性分类模型,其输入是实例的特征向量,输出是实例的类别,类别取+1和-1二个值,+1代表正类,-1代表负类.感知机对应于输入空间(特征空间)中将实例分 ...

  8. [GIT]比较不同分支的差异

        比如我们有 2 个分支:master, dev,现在想查看这两个 branch 的区别,有以下几种方式: undefined 1.查看 dev 有,而 master 中没有的: 1.查看 de ...

  9. Flutter移动电商实战 --(23)分类页_左侧类别导航制作

    自动生成dart类 https://javiercbk.github.io/json_to_dart/ 生成的代码 class Autogenerated { String code; String ...

  10. <JavaScript> 寄生继承详解

    // 将原型继承和非原型继承组合为一体的继承方式叫做组合继承,但是这种方法的继承是有一点小缺陷的,下级函数继承了无用的属性,所以我们有了寄生继承来解决污染问题; //创建上级构造函数-食物 funct ...