定制自己的struts标签

来源:互联网 发布:数据库同义词 编辑:程序博客网 时间:2024/06/11 20:56

我们知道,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>

 编写标签处理类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 
= "&nbsp;";
                
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>

最后运行的效果
原创粉丝点击