先在WEB-INF下建一个tlds文件夹,起一个名为my-tags.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" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"> <tlib-version>1.0</tlib-version> <short-name>g</short-name> <uri>uri名称</uri> <tag> <name>tag名</name> <tag-class>要找的类</tag-class> <body-content>tagdependent</body-content><!--固定写法--> </tag> <tag> <name>fp</name> <tag-class>要找的类</tag-class> <body-content>tagdependent</body-content> <!-- 如果需要传参数,就加上下面的 --> <attribute> <name>变量名</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>
这样,只需要在jsp页中加上如下的代码
<%@ taglib prefix="ec" uri="/WEB-INF/tlds/my-tags.tld" %>
,就可以通过<ec:tag名>和<ec:fp 变量名="变量值"/>来调用
然后在类中继承SimpleTagSupport,重写doTag方法,会自动找doTag。
固定需要写的有:
Configuration cfg = new Configuration(); //获得模板地址 cfg.setDirectoryForTemplateLoading(new File(req.getSession().getServletContext().getRealPath(此处为模板所在的位置 ))); //比如"/WEB-INF/template" cfg.setObjectWrapper(new DefaultObjectWrapper()); Template template = cfg.getTemplate(具体的模板名); Map<String, Object> map = new HashMap<String, Object>(); map.put(“随便声明的字符串,共模板文件ftl调用,比如"string"”, 要传到模板上的变量或者对象什么的); JspWriter out = this.getJspContext().getOut(); template.process(map, out); out.flush();
如果标签里面需要传参数,就直接声明一个成员变量,set一下就可以了。
在上面填写的template的位置,写ftl的页面
${页面传的值.属性} <#list 变量名(是collection型的)as collection的类型> <ul> <li> <a href="#">${collection的类型.属性}</a></span> </li> </ul> </#list>
理论知识不会,反正这样做好用。