Struts2 自定义标签

转载 2012年03月30日 15:58:56
在用struts2写自定义标签时遇到了一些问题,说了一个多小时解决了,嗯就在这里做个备忘吧!
(第一次写,,呵呵,有点怕出错,如果说的不好大家不要笑..呵呵)

说明一下我的环境:eclipse+tomcat

自定义标签编写分为以下几步:
1.编写UIBean:
Java代码 复制代码 收藏代码
  1.   
  2. @StrutsTag(description = "my email", name = "email", tldTagClass = "org.oa.web.tags.MyMailTag")   
  3. public class MyMail extends UIBean {   
  4.     public static final String TEMPLATE_NAME = "mymail";   
  5.   
  6.     private String address;   
  7.   
  8.     public MyMail(ValueStack stack, HttpServletRequest request,   
  9.             HttpServletResponse response) {   
  10.         super(stack, request, response);   
  11.     }   
  12.   
  13.     @StrutsTagAttribute(description = "set e-mail address ", type = "String")   
  14.     public void setAddress(String address) {   
  15.         this.address = address;   
  16.     }   
  17.   
  18.     @Override  
  19.     protected String getDefaultTemplate() {   
  20.         return TEMPLATE_NAME;   
  21.     }   
  22.   
  23.     @Override  
  24.     protected void evaluateExtraParams() {   
  25.         super.evaluateExtraParams();   
  26.         if (address != null) {   
  27.             addParameter("address", findString(address));   
  28.         }   
  29.     }   
  30.   
  31. }  


2.编写tag类:
AbstractUITag这个类要用到JSP-API,我大部分的时间都是浪费在这里,
这地方主要问题在于分清开发环境与运行环境.
我的包都是放在WEB-INF/lib下地.所以这里是运行环境,同时也是开发环境.
这里不要放入jsp-api.jar.tomcat下面lib文件夹中有.这样jsp-api.jar只需要在开发时
引用这个包,而不要把jsp-api.jar放入WEB-INF/lib下.

Java代码 复制代码 收藏代码
  1. public class MyMailTag extends AbstractUITag {   
  2.   
  3.     private static final long serialVersionUID = 1L;   
  4.     private String address;   
  5.   
  6.     @Override  
  7.     public Component getBean(ValueStack stack, HttpServletRequest req,   
  8.             HttpServletResponse res) {   
  9.   
  10.         return new MyMail(stack, req, res);   
  11.     }   
  12.   
  13.     @Override  
  14.     protected void populateParams() {   
  15.         super.populateParams();   
  16.         MyMail mail = (MyMail) component;   
  17.         mail.setAddress(address);   
  18.     }   
  19.   
  20.     public void setAddress(String address) {   
  21.         this.address = address;   
  22.     }   
  23.   
  24. }  


3.tld文件(只是重要部分.)
这个文件我是放在这个目录中的 WEB-INF/tld/user-tags.tld
Xml代码 复制代码 收藏代码
  1. <tlib-version>1.10</tlib-version>  
  2. <short-name>u</short-name>  
  3. <uri>/user-tags</uri>  
  4. <tag>  
  5.     <name>email</name>  
  6.     <tag-class>org.oa.web.tags.MyMailTag</tag-class>  
  7.     <body-content>JSP</body-content>  
  8.     <attribute>  
  9.         <name>address</name>  
  10.         <required>true</required>  
  11.     </attribute>  
  12. </tag>  


4.建立mymail.ftl文件.
文件放置在下面这个目录中
webroot/template/xhtml
webroot是我项目的根目录,
template不变,
xhtml是当前你使的哪种theme,如果是simple你就建simple文件夹.跟据自身情况定.

My E-mail:${parameters.address?html}

5配置web.xml文件
Xml代码 复制代码 收藏代码
  1. <jsp-config>  
  2.     <taglib>  
  3.         <taglib-uri>/WEB-INF/tld/user-tags.tld</taglib-uri>  
  4.         <taglib-location>/user-tags</taglib-location>  
  5.     </taglib>  
  6. </jsp-config>  


6.action类
Java代码 复制代码 收藏代码
  1. public class MyEmailAction {   
  2.   
  3.        
  4.     private String address;   
  5.   
  6.     @Override  
  7.     public String execute() throws Exception {   
  8.         setAddress("XXXXXXXXX@gmail.com");   
  9.         return super.execute();   
  10.     }   
  11.   
  12.     public String getAddress() {   
  13.         return address;   
  14.     }   
  15.   
  16.     public void setAddress(String address) {   
  17.         this.address = address;   
  18.     }   
  19.   
  20. }  


7.建立jsp文件
Jsp代码 复制代码 收藏代码
  1. <head>   
  2. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">   
  3. <%@ taglib prefix="u" uri="/user-tags" %>   
  4. <%@ taglib prefix="s" uri="/struts-tags"%>   
  5. <title>Insert title here</title>   
  6. </head>   
  7. <body>   
  8.     <h1>struts-tags:<s:property value="address"/></h1>   
  9.     <h1>user-tags: <u:email address="%{address}"/></h1>   
  10. </body>  


struts2.xml就不写了. 

struts2自定义标签的详细使用

例子:查询所有学生的资料(学号,姓名,性别,出生年月,家庭地址)      第一步:在tags包下,新建Java类,需继承javax.servlet.jsp.tagext.TagSupport,并编写...
  • lfc453048573
  • lfc453048573
  • 2014年02月16日 21:29
  • 13402

Struts2自定义标签——通过自定义标签实现权限控制

近期在开发中遇到一种需求:根据用户的权限决定是否显示某操作按钮。 例如:若用户拥有删除数据的权限,则在界面中显示“删除”按钮;若用户无该权限,则界面中不显示相应按钮。这样,就需要用到自定义标签了。要定...
  • u012325167
  • u012325167
  • 2016年05月12日 11:37
  • 2163

Struts2自定义标签的总结

Struts2自定义标签总结:Struts2自定义标签全都是为了回显 1、s:form action="user_%{id == null ? 'add' : 'edit'}"> Action=...
  • xuehuagongzi000
  • xuehuagongzi000
  • 2016年07月11日 20:31
  • 246

Struts2与freemarker自定义标签

包目录视图 领域模型层User.java package com.xuzengqiang.project.domain; public class User { private String u...
  • xuzengqiang2
  • xuzengqiang2
  • 2014年03月13日 16:58
  • 664

Struts2中的动态链接标签--->动态传值【转】

为了使从一个页面中链接一个动态数据变得简单,Struts2框架提供了一系列的标签。 Struts2标签的一种用法是创建链接到其他Web资源,特别是针对那些在本地应用中的资源。   1.普通链接 We...
  • guduxiaomo123
  • guduxiaomo123
  • 2014年04月03日 22:57
  • 1101

Struts2自定义标签

自定义标签编写分为以下几步: 1.编写UIBean: Java代码 @StrutsTag(description = "my email", name = "email", tldTagClass =...
  • kevinwu629
  • kevinwu629
  • 2010年06月22日 12:24
  • 1232

struts2 自定义标签

看完uitag这部份,发现一个问题,就是如果我要一个pagebar这样的UITag怎么办?总不能每一页我都在JSP上写吧?就算是复制都很不聪明。于是开始研究怎么去写一个Tag,在网站找了N多文章,大都...
  • zxq1406spys
  • zxq1406spys
  • 2010年06月30日 14:30
  • 450

struts2自定义标签

1)在web.xml文件中加入下列代码,指定tag.tld的位置     /website-tags   /WEB-INF/tag.tld     2)在WEB-INF目录下...
  • janefir
  • janefir
  • 2014年02月17日 13:45
  • 359

Struts2 自定义下拉框标签Tag

自定义标签主要包括三个步骤: 1、编写java类,继承TagSupport类; 2、创建tld文件,影射标签名和标签的java类; 3、jsp页面引入tld。 例子:自定义下拉框标签 如果...
  • itmyhome
  • itmyhome
  • 2016年02月25日 22:27
  • 2998

struts2自定义标签中传递对象

在自定义的标签中,传递的是字符串,而不是我们真正需要的对象。 但是我们可以通过传递过去的字符串,从ValueStack中取得我们真正需要的对象。 例如: 1.下面是需要传递的对象类 publi...
  • shihongjian001
  • shihongjian001
  • 2011年11月25日 18:14
  • 1033
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Struts2 自定义标签
举报原因:
原因补充:

(最多只允许输入30个字)