新建文件

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. [Qt Quick] No rule to make target 问题解决办法

    [问题描述] 修改项目中资源的qml文件名或删除无用资源文件后,重新构建项目时,会出现类似如下的问题提示: No rule to make target 'aaa', needed by 'bbb'. ...

  2. 线程的分离状态 detached joinable

    转自  http://blog.chinaunix.net/uid-26983585-id-3315953.html 其实在写上一篇日志的时候,由于我把创建线程的返回值的判断条件写错了,程序每次运行的 ...

  3. Java面向对象3(K~O)

    K     正方形(SDUT 2444) import java.lang.reflect.Array; import java.util.*; public class Main { public ...

  4. 应用fluent二维单向流泥沙冲刷作用下河床变形代码【转载】

    本代码转载自:http://www.codeforge.cn/read/260028/keti_2d_b.c__html #include "udf.h" #define Rho ...

  5. idea 2018注册码(激活码)

    最近做一个项目,用idea 社区版的   但是缺少了好多功能 无奈只能用专业版的,但是需要注册激活  下面是我的注册方法 1.打开了idea  会提示让激活  选择Licensse server 2. ...

  6. Flutter设置Container的最大最小宽高

    Flutter中设置Container宽高可直接通过width和height属性来设置:如下 Container( width: 100, height: 100, color: Colors.red ...

  7. 组件 computed 与 vuex 中 getters 的使用,及 mapGetters 的使用,对象上追加属性,合并对象

    vue 是响应式的数据,这一点相当的方便我们的操作,但有些错误的操作方法会 vue 的响应无效 除此之外我们还要了解 vue.set() 和 Object.assgin() 的使用 vue.set() ...

  8. hashMap 底层原理+LinkedHashMap 底层原理+常见面试题

    1.源码 java1.7    hashMap 底层实现是数组+链表 java1.8 对上面进行优化  数组+链表+红黑树 2.hashmap  是怎么保存数据的. 在hashmap 中有这样一个结构 ...

  9. Swift 循环

    循环类型 Swift 语言提供了以下几种循环类型.点击链接查看每个类型的详细描述: 循环类型 描述 for-in 遍历一个集合里面的所有元素,例如由数字表示的区间.数组中的元素.字符串中的字符. fo ...

  10. kotlin中匿名对象

    open class MyClass { private fun too()=object { var x : String ="x" } fun publictoo()=obje ...