JSP自定义tag
2016-09-20 17:52
288 查看
前端需要调用后端的配置,想起velocity-tools。然而jsp的话,目前只能想到tag和EL表达式了。
Tag相当好写,jsp2.0提供了简化写法:
编写一个java类:
然后编写对应tld:
然后就可以在页面上使用了:
上述是没有body的tag,如果想要输出body的内容:
新写一个java类:
在原来tld文件里面追加一个tag:
在页面上:
如果想要在tag上追加参数:
在tld中添加一个新tag:
在页面上使用:
如果想要使用传参,使用EL表达:
在java类中添加一个static方法:
然后在tld中添加:
然后页面上调用:
在spring mvc 中,有个很好用的tag支持类RequestContextAwareTag,下面做一个简单的使用:
reference:
http://www.runoob.com/jsp/jsp-custom-tags.html https://www.ibm.com/developerworks/cn/java/j-lo-jsp2tag/
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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" 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> <att 4000 ribute> <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/
相关文章推荐
- 在c#中运行js脚本(将js文件生成为.dll文件)
- PDF.js在线预览pdf、图片、txt类型文件
- js中数组内置方法
- js代码判断浏览器种类IE、FF、Opera、Safari、chrome及版本
- js代码判断浏览器种类IE、FF、Opera、Safari、chrome及版本
- CommonJS和AMD/CMD!
- js判断一个字符串是以某个字符串开头
- js基础-表单验证和提交
- JavaScript数组去重的几种方法
- 用js实现倒计时和在页面显示当前时间
- FusionCharts插件制作饼图、曲线图jsp页面实例
- Js 类型方面的神坑
- maven引入json-lib的正确方法
- 懒人福利:Xcode插件将JSON格式化输出为模型的属性->ESJsonFormat-Xcode
- js保留几位小数
- JS中模块的写法
- 原生js实现双色球的方法
- 一行代码实现js数组去重
- [JS]JS对象的内部原型(__proto__)和构造器的原型(prototype)
- jsp页面通过iframe嵌套html页面不可编辑