Struts2 自定义标签

在用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. }  
@StrutsTag(description = "my email", name = "email", tldTagClass = "org.oa.web.tags.MyMailTag")
public class MyMail extends UIBean {
	public static final String TEMPLATE_NAME = "mymail";

	private String address;

	public MyMail(ValueStack stack, HttpServletRequest request,
			HttpServletResponse response) {
		super(stack, request, response);
	}

	@StrutsTagAttribute(description = "set e-mail address ", type = "String")
	public void setAddress(String address) {
		this.address = address;
	}

	@Override
	protected String getDefaultTemplate() {
		return TEMPLATE_NAME;
	}

	@Override
	protected void evaluateExtraParams() {
		super.evaluateExtraParams();
		if (address != null) {
			addParameter("address", findString(address));
		}
	}

}


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. }  
public class MyMailTag extends AbstractUITag {

	private static final long serialVersionUID = 1L;
	private String address;

	@Override
	public Component getBean(ValueStack stack, HttpServletRequest req,
			HttpServletResponse res) {

		return new MyMail(stack, req, res);
	}

	@Override
	protected void populateParams() {
		super.populateParams();
		MyMail mail = (MyMail) component;
		mail.setAddress(address);
	}

	public void setAddress(String address) {
		this.address = address;
	}

}


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. }  
public class MyEmailAction {

	
	private String address;

	@Override
	public String execute() throws Exception {
		setAddress("XXXXXXXXX@gmail.com");
		return super.execute();
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

}


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就不写了. 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值