我的自定义 jsp 标签遇到了非常奇怪的问题——部署在 tomcat 6 中的工作正常,但在 tomcat 7 环境中不起作用。这是我的标签处理程序类:
private Long millis;
/**
* Constructor
*/
public ConvertMillisecondsValueTag() {
super();
millis = null;
}
/**
* Tag name
*/
public String getTagName() {
return "convertMillisValueTag";
}
public Long getMillis() {
return this.millis;
}
public void setMillis(Long millis) {
this.millis = millis;
}
/**
* EVAL_PAGE
*/
public int doEndTag() throws JspTagException {
StringBuilder buff = new StringBuilder();
long timeInSeconds = this.millis/1000;
int seconds = (int)(timeInSeconds % 60);
int minutes = (int)((timeInSeconds % 3600) / 60);
int hours = (int)((timeInSeconds % 86400) / 3600);
int days = (int)((timeInSeconds / 86400));
if (days > 0) {
buff.append(days + " d, ");
}
if (hours > 0) {
buff.append(hours + " h, ");
}
if (minutes > 0) {
buff.append(minutes + " min, ");
}
if (seconds > 0) {
buff.append(seconds + " sec");
}
try {
pageContext.getOut().print(buff.toString());
} catch (Exception e) {
e.printStackTrace();
}
return TagSupport.EVAL_PAGE;
}
/**
* Release this instance of tag
*/
public void release() {
this.millis = null;
}
这里是我的 tld 定义:
<?xml version="1.0" encoding="UTF-8"?>
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0">
<description>Itedge JSP Tag Library</description>
<tlib-version>1.0</tlib-version>
<short-name>itedge</short-name>
<uri>http://www.itedge.sk/tags</uri>
<tag>
<description>
Takes milliseconds input (long) and displays it in
second, minutes, hours and days
</description>
<name>convertMillisValue</name>
<tag-class>com.itedge.solutionmanager.web.tags.ConvertMillisecondsValueTag</tag-class>
<body-content>JSP</body-content>
<attribute>
<description>Milliseconds input (long).</description>
<name>millis</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
下面是标签的使用:
当我在tomcat 6中部署项目时,它工作正常,转换毫秒值并显示它,但在tomcat 7中,它简单不打印任何内容,并且当我在调试模式下的doEndTag方法中设置断点时,没有断点匹配. 你有什么想法,可能是什么问题?我知道 tomcat 6 使用 servlet 2.5 api 而 tomcat 7 使用 3.0 servlet api,这是我唯一的线索。