项目中用到了自定义标签,在此记录一下,感觉这套体系可能有点老了,不过毕竟自己用过了,从别人那里学到了,还是记录下来,难免以后会用到。
首先,先定义好函数
1 package org.controller.taglib; 2 3 import java.util.List; 4 5 import org.apache.commons.lang.ArrayUtils; 6 import org.apache.commons.lang.StringUtils; 7 import org.apache.commons.lang.math.NumberUtils; 8 import org.controller.cfg.Settings; 9 import org.controller.cfg.SystemGlobals; 10 import org.model.businessobject.bbs.privilege.Employee; 11 import org.model.businessobject.enumpo.ApplyState; 12 import org.model.businessobject.enumpo.ApplyVacationState; 13 import org.model.businessobject.workflow.Apply; 14 import org.model.businessobject.workflow.FeeType; 15 import org.model.businessobject.workflow.DeptBudget.MonthBudget; 16 import org.model.businessobject.workflow.vacation.ApplyVacation; 17 import org.model.businessobject.workflow.vacation.VacationType; 18 import org.model.locator.impl.ServiceLocatorImpl; 19 import org.model.service.ApplyService; 20 import org.model.util.DES; 21 import org.model.util.DataUtils; 22 23 /** 24 * 作者:wyh 25 * 描述:定制fn 函数 26 * 说明: 27 */ 28 public final class CustomFunctions { 29 /** 30 * 通过员工id 反查显示员工名 31 * @param empId 32 * @return 33 */ 34 public static String renderEmpName(final int empId){ 35 String empName = StringUtils.EMPTY; 36 if(empId>0){ 37 final Employee emp = ServiceLocatorImpl.newInstance().getPrivilegeService().getEmployeeById(empId); 38 if(emp!=null) { 39 empName = emp.getEmpName(); 40 } 41 } 42 return empName; 43 } 44 }
第二步,就是定义标签了,标签文件是tld格式的文件
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <taglib xmlns="http://java.sun.com/xml/ns/j2ee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" 5 version="2.0"> 6 <description>custom functions library</description> 7 <display-name>custom functions</display-name> 8 <tlib-version>1.1</tlib-version> 9 <short-name>myfn</short-name><!--定义标签头部--> 10 <uri>http://www.xxx.com/jsp/tag/functions</uri> <!--这块引用的时候会用到--> 11 <function> 12 <description>通过员工Id显示员工名称</description> 13 <name>renderEmpName</name> 14 <function-class>org.controller.taglib.CustomFunctions</function-class> 15 <function-signature>java.lang.String renderEmpName(int)</function-signature> 16 </function>
接下来,把tld文件加入jspf中,多个标签直接依次加入就好
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%><%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%><%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%><%@ taglib uri="http://www.xxx.com/jsp/roco-tag" prefix="roco"%><%@ taglib uri="http://www.xxx.com/jsp/tag/functions" prefix="myfn"%>
到此,就可以在页面中引用了,只需在页头加入<%@ include file="/WEB-INF/pages/public/taglibs.jspf"%>即可。
当要使用这个标签时,跟jstl引用方法是一样的,上面那个例子就这样用:
<td>${myfn:renderEmpName(applyVacation.empId)}</td>
总之来说,自定义标签很简单,知道怎么用就行了