ButtonTag继承自BaseHandlerTag,并添加了property,text,value等属性.源码如下(jakarta-struts-1.0.2):
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 ButtonTag extends BaseHandlerTag

...{

protected String property;
protected String text;
protected String value;

public ButtonTag()

...{
property = null;
text = null;
value = null;
}

public String getProperty()

...{
return property;
}

public void setProperty(String property)

...{
this.property = property;
}

public String getValue()

...{
return value;
}

public void setValue(String value)

...{
this.value = value;
}

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

...{
String label = value;
if(label == null && text != null)
label = text;
if(label == null || label.trim().length() < 1)
label = "Click";
StringBuffer results = new StringBuffer();
results.append("<input type="button"");
if(property != null)

...{
results.append(" name="");
results.append(property);
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(" value="");
results.append(label);
results.append(""");
results.append(prepareEventHandlers());
results.append(prepareStyles());
results.append(">");
ResponseUtils.write(pageContext, results.toString());
return 6;
}

public void release()

...{
super.release();
property = null;
text = null;
value = null;
}
}
通过源码,我们可以看出,jsp页面上的<html:button />实际上就是通过ButtonTag类输出一串"<input type="button" ...>"的html代码,这样就大大简化了前台html标记。由此,我们可以在jsp页面中只用一个标记来表示后台通过复杂的业务逻辑后生成的html代码。
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 ButtonTag extends BaseHandlerTag
...{
protected String property;
protected String text;
protected String value;
public ButtonTag()
...{
property = null;
text = null;
value = null;
}
public String getProperty()
...{
return property;
}
public void setProperty(String property)
...{
this.property = property;
}
public String getValue()
...{
return value;
}
public void setValue(String value)
...{
this.value = value;
}
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
...{
String label = value;
if(label == null && text != null)
label = text;
if(label == null || label.trim().length() < 1)
label = "Click";
StringBuffer results = new StringBuffer();
results.append("<input type="button"");
if(property != null)
...{
results.append(" name="");
results.append(property);
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(" value="");
results.append(label);
results.append(""");
results.append(prepareEventHandlers());
results.append(prepareStyles());
results.append(">");
ResponseUtils.write(pageContext, results.toString());
return 6;
}
public void release()
...{
super.release();
property = null;
text = null;
value = null;
}
}
本文介绍了Struts框架中ButtonTag的实现原理,该类继承自BaseHandlerTag,并新增property、text、value等属性,用于简化前端HTML按钮的生成。
375

被折叠的 条评论
为什么被折叠?



