本文介绍struts2简单自定义标签,繁杂标签定义请查看struts2结合freemarker自定义标签,实现过程请参照下文的步骤。
以数字1-26转换为大写字母为例
1、在项目src下新建一个com.tag包
2、在com.tag包下新建Struts2Tag.java类,内部实现如下:
========================-- start --============================
package com.tag;
/**
* 扩展struts2标签 <br>
* @author RSun
* @Date 2012-10-8上午11:47:26
*/
public class Struts2Tag {
/**
* 转换序号为字母A/B/C/D/....
* @param num 数字(1-26)
* @return
*/
public static String replaceOptions(Integer num) {
if(num==null || num<0 || num>26) num = 1;
String options = ((char)(num+64))+"";
return options;
}
}
========================-- end--============================
3、在WEB-INF下新建tld文件RSun-tags.tld,内部实现如下:
========================-- start --===========================
<?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">
<description>struts2_tags_test</description>
<tlib-version>2.0</tlib-version>
<short-name>RSun</short-name>
<uri>/RSun-tags</uri> <!-- 页面引用tld名称 -->
<!-- 关联tag类相关配置 -->
<function>
<description>substring</description>
<name>replaceOptions</name>
<function-class>com.tag.Struts2Tag</function-class><!-- 关联引用类 -->
<function-signature>java.lang.String replaceOptions(java.lang.Integer)</function-signature> <!-- 方法及参数 -->
<example>${st-tag:replaceOptions(num)}</example> <!-- 页面使用示例 -->
</function>
</taglib>
==========================-- end--============================
4、相关配置已实现,下面看jsp页面引用示例
首先需要引入:<%@ taglib uri="/RSun-tags" prefix="st" %>
然后页面调用:${st-tag:replaceOptions(num)}
结果示例:如果num=1,则输出A。
执行流程:struts会根据标签找到Struts2Tag类的 replaceOptions方法,然后输出结果值。