前端需要调用后端的配置,想起velocity-tools。然而jsp的话,目前只能想到tag和EL表达式了。

Tag相当好写,jsp2.0提供了简化写法

编写一个java类:

public class HelloWorldTag extends SimpleTagSupport {

    public void doTag() throws JspException, IOException{
JspWriter out = getJspContext().getOut();
out.println("Hello Custom Tag!");
}
}

然后编写对应tld:

<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee [url]http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd[/url]"
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>Example TLD</short-name>
<tag>
<name>hello</name>
<tag-class>com.test.demo.HelloWorldTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>

然后就可以在页面上使用了:

<%@ taglib prefix="ex" uri="/WEB-INF/hello.tld" %>
<ex:hello/>

上述是没有body的tag,如果想要输出body的内容:

新写一个java类:

public class BodyTag extends SimpleTagSupport {

    StringWriter sw = new StringWriter();

    public void doTag() throws JspException, IOException{
getJspBody().invoke(sw);
JspWriter out = getJspContext().getOut();
out.println(sw.toString());
} }

在原来tld文件里面追加一个tag:

<tag>
<name>body</name>
<tag-class>com.test.demo.BodyTag</tag-class>
<body-content>scriptless</body-content>
</tag>

在页面上:

<ex:body>
This is message body.
</ex:body>

如果想要在tag上追加参数:

public class StandardTag extends SimpleTagSupport {

    private String message;

    public void setMessage(String message) {
this.message = message;
} StringWriter sw = new StringWriter(); public void doTag() throws JspException, IOException{
JspWriter out = getJspContext().getOut();
if (message!=null){
//from filed
out.println(message);
}else{
//from body
getJspBody().invoke(sw);
out.println(sw.toString()); }
} }

在tld中添加一个新tag:

<tag>
<name>msg</name>
<tag-class>com.test.demo.StandardTag</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>message</name>
<required>false</required>
<type>java.lang.String</type>
</attribute>
</tag>

在页面上使用:

<ex:msg message="show message from para">
</ex:msg>
---------------
<ex:msg>
if message==null , then show body.
</ex:msg>

如果想要使用传参,使用EL表达:

在java类中添加一个static方法:

public static String hello(String name){
return "Welcome: " + name;
}

然后在tld中添加:

<function>
<name>welcome</name>
<function-class>com.test.demo.StandardTag</function-class>
<function-signature>java.lang.String hello(java.lang.String)</function-signature>
<example>${ex:welcome('Ryan')}</example>
</function>

然后页面上调用:

${ex:welcome('Leslie')}

在spring mvc 中,有个很好用的tag支持类RequestContextAwareTag,下面做一个简单的使用:

public abstract class BaseTag extends RequestContextAwareTag {
private static final EPCLogger LOGGER = EPCLogger.getLogger(BaseTag.class);
private static final long serialVersionUID = -6258930875039222435L;
private BeanUtils beanUtils = new BeanUtils();
private HandlebarUtils handlebarUtils = new HandlebarUtils(); public abstract Object getModel(); public BaseTag() {
} public void renderHandlebarsView(String templateLocation) {
try {
Template e = this.handlebarUtils.compile(templateLocation);
e.apply(this.getModel(), this.pageContext.getOut());
} catch (Exception var3) {
LOGGER.error(UITagsSystemEvent.BASE_TAG_ERROR, "Error occurred while rendering handlebars view.", var3);
} } public Object getBean(String beanName) {
Validate.notNull(beanName);
return this.beanUtils.getBean(this.getRequestContext(), beanName);
}
}
public class BeanUtils {
public BeanUtils() {
} public Object getBean(RequestContext requestContext, String beanName) {
return requestContext.getWebApplicationContext().getBean(beanName);
}
}

reference:

http://www.runoob.com/jsp/jsp-custom-tags.html

https://www.ibm.com/developerworks/cn/java/j-lo-jsp2tag/

JSP自定义tag的更多相关文章

  1. Jsp 自定义tag标签

    1转自:https://blog.csdn.net/yusimiao/article/details/46835617 Jsp自定义tag标签 自定义tag标签的好处 程序员可以自定一些特定功能的标记 ...

  2. JSP自定义tag控件标签

    JSP支持自定tag的方法,那就是直接讲JSP代码保存成*.tag或者*.tagx的标签定义文件.tag和tagx文件不仅支持经典jsp代码,各种标签模版代码,还支持xml样式的jsp指令代码. 按照 ...

  3. ylz框架外网之JSP 自定义TAG

    首先用到了ServletContext,全局容器的概念,之前不知道哪里有用,现在用到,这里解析的是一个sysCode的TAG,用于下拉框等选项的时候自动显示要选的内容.大致思路是,利用前一篇所说到的E ...

  4. jsp如何自定义tag的标签库?

    虽然和上一次的使用自定义的tld标签简化jsp的繁琐操作的有点不同,但是目的也是一致的.自定义tag比较简单. 1.新建tag标签 在WEB-INF目录下新建一个tags的文件夹,是自定义tag标签的 ...

  5. 自定义标签 与 JSTL(JSP Standard Tag Library)

    1.自定义标签 [理解]     [1]简介            > 在JSP2.0以后,在jsp页面中不建议使用脚本片段<% %>和JSP表达式<%= %>     ...

  6. JSP自定义标签之Hello Costom tag小例子

    1.项目结构 2.实现自定义tag所需依赖 <dependency> <groupId>javax.servlet</groupId> <artifactId ...

  7. jsp中 自定义 tag的几种方式

    在jsp文件中,可以引用tag和tld文件. 1.对于tag文件,使用tagdir引用(这个直接是引用的后缀tag文件的jsp文件) <%@ taglib prefix="ui&quo ...

  8. JSP 自定义标签

    0 标签技术的API继承体系 1 作用 jsp自定义标签用于移除页面中的java代码 2 实现 2.1 标签处理类ViewIPTag.java package com.zsm.util; import ...

  9. JSP自定义标签开发入门

    一般情况下开发jsp自定义标签需要引用以下两个包 import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; 首先我们需要大致了解开发 ...

随机推荐

  1. Eclipse更新SDK速度慢,解决办法

    在SDK Manager -> tools -> options中: HTTP Proxy Server: mirrors.neusoft.edu.cn HTTP Proxy Port: ...

  2. Java工作环境笔记

    环境 1. Jvm最简生存指南: http://www.importnew.com/10127.html 2. 所有路径中,不要出现中文,即使开始的时候,调试Tomcat时,路径有中文也可以,你真不知 ...

  3. Hadoop学习笔记—16.Pig框架学习

    一.关于Pig:别以为猪不能干活 1.1 Pig的简介 Pig是一个基于Hadoop的大规模数据分析平台,它提供的SQL-LIKE语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换 ...

  4. MySQL 对比数据库表结构

    200 ? "200px" : this.width)!important;} --> 介绍 本章主要介绍怎样对比数据库的表结构的差异,这里主要介绍使用mysqldiff工具 ...

  5. delegate、notification、KVO场景差别

    delegate: 编译器会给出没有实现代理方法的警告 一对一 使用weak而不是assign,或者vc消失时置为nil 可以传递参数,还可以接收返回值 notification: 编译期无法排错 一 ...

  6. Objective-C 工厂模式(下) -- 抽象工厂模式

    相比简单工厂模式, 只有一个工厂 能生产的手机也是固定的 抽象工厂模式类似于有很多家工厂, 当用户要买什么手机就创建对应的工厂去生产 比如用户要买iPhone就创建一个Apple工厂来生产手机, 要买 ...

  7. Spark算子选择策略

    摘要  1.使用reduceByKey/aggregateByKey替代groupByKey 2.使用mapPartitions替代普通map 3.使用foreachPartitions替代forea ...

  8. DataTable转Entity(Emit版)

    public static List<T> ToList<T>(DataTable dt)        {            List<T> list = n ...

  9. 2013 duilib入门简明教程 -- FAQ (19)

        虽然前面的教程几乎把所有的知识点都罗列了,但是有很多问题经常在群里出现,所以这里再次整理一下.     需要注意的是,在下面的问题中,除了加上XML属性外,主窗口必须继承自WindowImpl ...

  10. ELF文件

    ELF文件格式是一个开发标准,各种UNIX系统的可执行文件都采用ELF格式,它有三种不同的类型: 可重定位的目标文件 可执行文件 共享库 现在分析一下上一篇文章中经过汇编之后生成的目标文件max.o和 ...