我们知道,struts的标签都定义在*.tld标签库文件中。这样,我们就可以建一个tld文件,定义自己的个性化标签。以下以html标签为例,创建一个含有table标签的tld文件
1.mytag.tld:
<?
xml version="1.0" encoding="UTF-8"
?>
< taglib >
< tlibversion > 1.0 </ tlibversion >
< jspversion > 1.1 </ jspversion >
< tag >
< name > table </ name >
< tagclass > org.apache.struts.taglib.html.Table </ tagclass >
< attribute >
< name > id </ name >
< required > false </ required >
< rtexprvalue > true </ rtexprvalue >
</ attribute >
< attribute >
< name > row </ name >
< required > false </ required >
< rtexprvalue > true </ rtexprvalue >
</ attribute >
< attribute >
< name > col </ name >
< required > false </ required >
< rtexprvalue > true </ rtexprvalue >
</ attribute >
< attribute >
< name > tabindex </ name >
< required > false </ required >
< rtexprvalue > true </ rtexprvalue >
</ attribute >
< attribute >
< name > onclick </ name >
< required > false </ required >
< rtexprvalue > true </ rtexprvalue >
</ attribute >
</ tag >
</ taglib >
< taglib >
< tlibversion > 1.0 </ tlibversion >
< jspversion > 1.1 </ jspversion >
< tag >
< name > table </ name >
< tagclass > org.apache.struts.taglib.html.Table </ tagclass >
< attribute >
< name > id </ name >
< required > false </ required >
< rtexprvalue > true </ rtexprvalue >
</ attribute >
< attribute >
< name > row </ name >
< required > false </ required >
< rtexprvalue > true </ rtexprvalue >
</ attribute >
< attribute >
< name > col </ name >
< required > false </ required >
< rtexprvalue > true </ rtexprvalue >
</ attribute >
< attribute >
< name > tabindex </ name >
< required > false </ required >
< rtexprvalue > true </ rtexprvalue >
</ attribute >
< attribute >
< name > onclick </ name >
< required > false </ required >
< rtexprvalue > true </ rtexprvalue >
</ attribute >
</ tag >
</ taglib >
编写标签处理类Table.java:
package
org.apache.struts.taglib.html;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext. * ;
import org.apache.struts.util.ResponseUtils;
// Referenced classes of package org.apache.struts.taglib.html:
// BaseHandlerTag
public class Table extends BaseHandlerTag
... {
protected String id;
protected String text;
protected String row;
protected String col;
public Table()
...{
id = null;
row = "1";
col = "1";
}
public String getId()
...{
return id;
}
public void setId(String id)
...{
this.id = id;
}
public String getRow()
...{
return row;
}
public void setRow(String r)
...{
this.row = r;
}
public String getCol()
...{
return col;
}
public void setCol(String c)
...{
this.col = c;
}
public int doStartTag()
throws JspException
...{
text = null;
return 2;
}
public int doAfterBody()
throws JspException
...{
if(bodyContent != null)
...{
String value = bodyContent.getString().trim();
if(value.length() > 0)
text = value;
}
return 0;
}
public int doEndTag()
throws JspException
...{
StringBuffer results = new StringBuffer();
results.append("<table border="1"");
if(id != null)
...{
results.append(" id="");
results.append(id);
results.append(""");
}
if(accesskey != null)
...{
results.append(" accesskey="");
results.append(accesskey);
results.append(""");
}
if(tabindex != null)
...{
results.append(" tabindex="");
results.append(tabindex);
results.append(""");
}
results.append(prepareEventHandlers());
results.append(prepareStyles());
results.append(">");
String[] rowdata = text.split("//n");
String[] coldata = null;
System.out.println(" text: "+text+" rowdata.length="+rowdata.length);
int r = new Integer(row).intValue();
int c = new Integer(col).intValue();
String v = "";
for(int i=0;i<r;i++)
...{
results.append("<tr>");
v = "";
if(i<rowdata.length && !rowdata[i].equals(""))v = rowdata[i];
coldata = v.split("//t");
for(int j=0;j<c;j++)
...{
results.append("<td>");
v = " ";
if(j<coldata.length && !coldata[j].equals(""))v = coldata[j];
results.append(v);
results.append("</td>");
}
results.append("</tr>");
}
results.append("</table>");
ResponseUtils.write(pageContext, results.toString());
return 6;
}
public void release()
...{
super.release();
id = null;
text = null;
row = null;
col = null;
}
}
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext. * ;
import org.apache.struts.util.ResponseUtils;
// Referenced classes of package org.apache.struts.taglib.html:
// BaseHandlerTag
public class Table extends BaseHandlerTag
... {
protected String id;
protected String text;
protected String row;
protected String col;
public Table()
...{
id = null;
row = "1";
col = "1";
}
public String getId()
...{
return id;
}
public void setId(String id)
...{
this.id = id;
}
public String getRow()
...{
return row;
}
public void setRow(String r)
...{
this.row = r;
}
public String getCol()
...{
return col;
}
public void setCol(String c)
...{
this.col = c;
}
public int doStartTag()
throws JspException
...{
text = null;
return 2;
}
public int doAfterBody()
throws JspException
...{
if(bodyContent != null)
...{
String value = bodyContent.getString().trim();
if(value.length() > 0)
text = value;
}
return 0;
}
public int doEndTag()
throws JspException
...{
StringBuffer results = new StringBuffer();
results.append("<table border="1"");
if(id != null)
...{
results.append(" id="");
results.append(id);
results.append(""");
}
if(accesskey != null)
...{
results.append(" accesskey="");
results.append(accesskey);
results.append(""");
}
if(tabindex != null)
...{
results.append(" tabindex="");
results.append(tabindex);
results.append(""");
}
results.append(prepareEventHandlers());
results.append(prepareStyles());
results.append(">");
String[] rowdata = text.split("//n");
String[] coldata = null;
System.out.println(" text: "+text+" rowdata.length="+rowdata.length);
int r = new Integer(row).intValue();
int c = new Integer(col).intValue();
String v = "";
for(int i=0;i<r;i++)
...{
results.append("<tr>");
v = "";
if(i<rowdata.length && !rowdata[i].equals(""))v = rowdata[i];
coldata = v.split("//t");
for(int j=0;j<c;j++)
...{
results.append("<td>");
v = " ";
if(j<coldata.length && !coldata[j].equals(""))v = coldata[j];
results.append(v);
results.append("</td>");
}
results.append("</tr>");
}
results.append("</table>");
ResponseUtils.write(pageContext, results.toString());
return 6;
}
public void release()
...{
super.release();
id = null;
text = null;
row = null;
col = null;
}
}
在index.jsp页面中引用自定义的table标签:
<%
...
@page contentType="text/html;charset=UTF-8" language="java"
%>
<% ... @taglib uri="/WEB-INF/mytag.tld" prefix="myhtml" %>
< html >
< head >< title > struts test </ title ></ head >
< body >
this is a table tag:
< myhtml:table id ="hh" row ="3" col ="3" > 11/n21/t22 </ myhtml:table >
</ body >
</ html >
<% ... @taglib uri="/WEB-INF/mytag.tld" prefix="myhtml" %>
< html >
< head >< title > struts test </ title ></ head >
< body >
this is a table tag:
< myhtml:table id ="hh" row ="3" col ="3" > 11/n21/t22 </ myhtml:table >
</ body >
</ html >
最后运行的效果