Struts2使用自定义标签
1. 在web.xml中配置struts标签库
<!-- 配置struts2的标签库 --> <jsp-config> <taglib> <taglib-uri>/struts-tags</taglib-uri> <taglib-location>/WEB_INF/system_tags.tld</taglib-location> </taglib> </jsp-config> |
2. 在指定位置创建一个标签文件(.tld) ,可在struts2的核心包下的/META-INF目录下复制struts-tag.tld文件,然后自己重新定义需要的标签,完整的定义如下,可根据自己需要自行添加,这里以一个<sys:url >为例
<?xml version="1.0" encoding="UTF-8"?> <taglib version="2.0" 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 web-jsptaglibrary_2_0.xsd">
<tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>sys</short-name> <uri>/system_tags</uri>
<tag> <name>url</name> <tag-class>com.zys.system.support.UrlTag</tag-class> <body-content>JSP</body-content> <attribute> <name>url</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib> |
标签详解:
a. <tlib-version>:标签的版本号
b. <jsp-version>: jsp的版本号
c. <short-name>:标签的缩略名,在jsp页面作为”prefix”属性的值
d. <uri>: 统一资源标识符,在jsp页面作为”uri”属性的值
e. <name>: 自定义标签名
f. <tag-class >: 自定义标签的实现类
g. <body-content>: 值为JSP表示接受所有JSP语法
h. <attribute>: 对应标签的属性
i. <name>: attribute下的name标签表示属性名
j. <rtexprvalue>: 表示是否可以使用JSP表达式,true表示可以使用动态值,false表示只能用指定值
k. <required>: 为必写的标签,不写属性标签不能被正常使用(有待确定)
3. 新建一个java类,并继承TagSupport类,并重写其中doEndTag和doStartTag方法(这个方法由系统自动调用),由于设置了namespace,所以需要写这个类来实现把项目名添加到URL中
publicclass UrlTag extends TagSupport{
private String url; public String getUrl() { returnurl; } publicvoid setUrl(String url) { this.url = url; }
/** * 重写doStartTag方法,将项目名加上url输出到客户端(系统自动调用) */ publicint doStartTag(){ try { url= (url==null)? "" : url; pageContext.getOut().print("SSHStudy"+url); } catch (IOException e) { e.printStackTrace(); } returnSKIP_BODY; }
/** * 重写doEndTag方法(系统自动调用) */ publicint doEndTag(){ returnSKIP_BODY; } }
|
4. 在JSP页面导入自定义标签库
<%@taglib uri="/system_tags" prefix="sys" %> |
5. 在form表单的action处使用自定义标签
<form action="<sys:url url="/system/login!check.do" />" method="post"> 用户名:<input type="text" name="use"/><br> 密码:<input type="password" name="pd"/><br> <input type="submit" value="提交"/> </form> |