实验室网站所遇技术(四) 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 浏览次数&nbsp;${my:add(article.times,article.id) }

传递两个参数

 

至此,编写完成

不断尝试,呵呵!

posted @ 2012-08-24 21:30  lihuabest  阅读(269)  评论(0编辑  收藏  举报