实验室网站所遇技术(四) JSTL自定义标签函数
由于网页要求尽量不适用java脚本,所以在用EL+JSTL显示文章的时候,关于文章的浏览次数就成了一个问题。
想了一下,原本要JSTL自动执行一个js函数,修改浏览次数,但是网上好像没有这种做法。后来想到用JSTL的自定义标签函数。
具体做法:
1. 处理的java类
1 package edu.cdu.lab.access; 2 3 import edu.cdu.lab.server.ArticleServer; 4 5 public class addPageLookTimes { 6 /** 7 * 8 * @param times 浏览次数 9 * @param articleId 文章的id 10 * @return 浏览次数 11 */ 12 public static String add(String times, String articleId) { 13 int t = Integer.valueOf(times); 14 int a = Integer.valueOf(articleId); 15 t++; 16 ArticleServer as = new ArticleServer(); //处理 文章的业务逻辑对象 17 as.addTimes(t, a); //处理方法 18 return t+""; 19 } 20 }
网上说实现方法必须是静态的。
处理的业务逻辑就不多解释了,就是更新times,根据articleId。
2.编写tld文件
1 <?xml version="1.0" encoding="UTF-8" ?> 2 3 <taglib xmlns="http://java.sun.com/xml/ns/j2ee" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" 6 version="2.0"> 7 8 <description>add article's reading times</description> 9 <tlib-version>1.0</tlib-version> 10 <short-name>my</short-name> 11 <uri>http://www.lihuabest.com/my/functions</uri> 12 13 <function> 14 <name>add</name> 15 <function-class>edu.cdu.lab.access.addPageLookTimes</function-class> <!-- 实现类--> 16 <function-signature>java.lang.String add(java.lang.String, java.lang.String)</function-signature> <!-- 实现方法 及返回和参数的类型 --> 17 </function> 18 </taglib>
这里要注意的是<name>add</name>这里的值必须是实现方法的名字add
3. 在web.xml注册
1 <!-- 这是我自定义的一个计数页面访问次数的jstl标签 --> 2 <jsp-config> 3 <taglib> 4 <taglib-uri>http://www.lihuabest.com/my/functions</taglib-uri> 5 <taglib-location>/WEB-INF/countTimes.tld</taglib-location> 6 </taglib> 7 </jsp-config>
<jsp-config></jsp-config>这个标签根据你的xml文件的dtd类型而定,有的不需要这个标签,直接也可以写<taglib></taglib>。
4. 页面使用
首部引用
1 <%@taglib uri="http://www.lihuabest.com/my/functions" prefix="my" %>
页面使用
1 浏览次数 ${my:add(article.times,article.id) }
传递两个参数
至此,编写完成
不断尝试,呵呵!