一.dream.tld
<?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 web-jsptaglibrary_2_0.xsd" version="2.0">
<description>A tag library exercising SimpleTag handlers.</description>
<tlib-version>1.0</tlib-version>
<short-name>dream</short-name>
<uri>/dream</uri>
<description>version 1.0</description>
<tag>
<name>date</name>
<tag-class>com.DateTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>format</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
二.Date.java
package com.taglib;
import java.io.IOException;
import java.io.Writer;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.components.Component;
import com.opensymphony.xwork2.util.ValueStack;
public class Date extends Component {
private HttpServletRequest request;
private String name;
private String format;
public Date(ValueStack vs) {
super(vs);
}
public Date(ValueStack vs, HttpServletRequest request) {
super(vs);
this.request = request;
}
//get.set略
public HttpServletRequest getRequest() {
return request;
}
public void setRequest(HttpServletRequest request) {
this.request = request;
}
public boolean end(Writer writer, String body) {
boolean result = super.start(writer);
try {
if (name != null && !"".equals(name)) {
Format f = new SimpleDateFormat(format);
StringBuffer sb = new StringBuffer();
String[] s = name.split("[.]");
Object obj = this.getStack().findValue(s[s.length - 1]);
if (obj instanceof java.sql.Timestamp) {
sb.append(f.format(obj));
} else if (obj instanceof java.util.Date) {
sb.append(f.format(obj));
} else if (obj instanceof java.util.Calendar) {
java.util.Calendar c = (Calendar) obj;
sb.append(f.format(c.getTime()));
}
writer.write(sb.toString());
}
} catch (IOException ex) {
ex.printStackTrace();
}
return result;
}
}
三.DateTag.java
package com.taglib;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.components.Component;
import org.apache.struts2.views.jsp.ComponentTagSupport;
import com.opensymphony.xwork2.util.ValueStack;
public class DateTag extends ComponentTagSupport {
private String name;
private String format = "yyyy-MM-dd";
public String getFormat() {
return format;
}
public void setFormat(String format) {
this.format = format;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Component getBean(ValueStack vs, HttpServletRequest request, HttpServletResponse response) {
return new Date(vs, request);
}
protected void populateParams() {
super.populateParams();
Date date = (Date) component;
date.setName(name);
date.setFormat(format);
}
}
四.jsp
<%@ taglib uri="/WEB-INF/tlds/dream.tld" prefix="dream"%>
...
<dream:date name="menu.uppTime" format="yyyy-MM-dd HH:mm:dd" />
<dream:date name="time" format="yyyy-MM-dd" />
....
其中,name可以是任何时间类型如:TimeStample,Date,Calendar等等,如果还有其他类型,可以扩展Date.java
name可以是"action中的实体.属性",或者是"action.属性".