JSP自定义tag
前端需要调用后端的配置,想起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的更多相关文章
- Jsp 自定义tag标签
1转自:https://blog.csdn.net/yusimiao/article/details/46835617 Jsp自定义tag标签 自定义tag标签的好处 程序员可以自定一些特定功能的标记 ...
- JSP自定义tag控件标签
JSP支持自定tag的方法,那就是直接讲JSP代码保存成*.tag或者*.tagx的标签定义文件.tag和tagx文件不仅支持经典jsp代码,各种标签模版代码,还支持xml样式的jsp指令代码. 按照 ...
- ylz框架外网之JSP 自定义TAG
首先用到了ServletContext,全局容器的概念,之前不知道哪里有用,现在用到,这里解析的是一个sysCode的TAG,用于下拉框等选项的时候自动显示要选的内容.大致思路是,利用前一篇所说到的E ...
- jsp如何自定义tag的标签库?
虽然和上一次的使用自定义的tld标签简化jsp的繁琐操作的有点不同,但是目的也是一致的.自定义tag比较简单. 1.新建tag标签 在WEB-INF目录下新建一个tags的文件夹,是自定义tag标签的 ...
- 自定义标签 与 JSTL(JSP Standard Tag Library)
1.自定义标签 [理解] [1]简介 > 在JSP2.0以后,在jsp页面中不建议使用脚本片段<% %>和JSP表达式<%= %> ...
- JSP自定义标签之Hello Costom tag小例子
1.项目结构 2.实现自定义tag所需依赖 <dependency> <groupId>javax.servlet</groupId> <artifactId ...
- jsp中 自定义 tag的几种方式
在jsp文件中,可以引用tag和tld文件. 1.对于tag文件,使用tagdir引用(这个直接是引用的后缀tag文件的jsp文件) <%@ taglib prefix="ui&quo ...
- JSP 自定义标签
0 标签技术的API继承体系 1 作用 jsp自定义标签用于移除页面中的java代码 2 实现 2.1 标签处理类ViewIPTag.java package com.zsm.util; import ...
- JSP自定义标签开发入门
一般情况下开发jsp自定义标签需要引用以下两个包 import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; 首先我们需要大致了解开发 ...
随机推荐
- checkbox选中状态不被改变
让它的状态只能看不能改变,加上onclick="return false;". 也可以disabled="true";但是这个颜色变淡了; <input ...
- (转载)开始iOS 7中自动布局教程(一)
这篇教程的前半部分被翻译出来很久了,我也是通过这个教程学会的IOS自动布局.但是后半部分(即本篇)一直未有翻译,正好最近跳坑翻译,就寻来这篇教程,进行翻译.前半部分已经转载至本博客,后半部分即本篇.学 ...
- numpy数组的操作
numpy - 介绍.基本数据类型.多维数组ndarray及其内建函数 http://blog.csdn.net/pipisorry/article/details/22107553 http://w ...
- Default Parameter Values in Python
Python’s handling of default parameter values is one of a few things that tends to trip up most new ...
- International Conference for Smart Health 2015 Call for Papers
Advancing Informatics for healthcare and healthcare applications has become an international researc ...
- 玩转Windows服务系列——创建Windows服务
创建Windows服务的项目 新建项目->C++语言->ATL->ATL项目->服务(EXE) 这样就创建了一个Windows服务项目. 生成的解决方案包含两个项目:Servi ...
- CSharpGL(3)使用CSharpGL.vsix插件
CSharpGL(3)使用CSharpGL.vsix插件 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo,更 ...
- JS数组定义及详解
1.什么是数组 数组就是一组数据的集合 其表现形式就是内存中的一段连续的内存地址 数组名称其实就是连续内存地址的首地址 2.关于js中的数组特点 数组定义时无需指定数据类型 数组定义时可以无需指定数组 ...
- Java接口和抽象类的区别
今天看到项目中,写了一个抽象类,里面有很多方法继承了这类,当调用这个接口时,采用的是这个抽象类去调方法的,当时一想,这个不就是我们说的Java的多态的特征: 继承:存在继承关系的子类和父类 重写:子类 ...
- The replication agent has not logged a progress message in 10 minutes.
打开Replication Monitor,在Subscription Watch List Tab中,发现有大量的status= “Performance critical” 的黄色Warning, ...