场景:多个页面中用到了同一个登录框/ 登录后的状态框(显示注册会员的信息)。整合成一个标签能简化JSP中的代码量。使之更清晰
1:web/WEB-INF 下配置自定tld文件 描述文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>2.2.3</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>barehead-tags</short-name>
<uri>/barehead-tags</uri> -JSP中使用时需要靠uri引入此自定义标签库
<tag>
<name>loginstatusframe</name>
<tag-class>com.bareheadzzq.page.tags.LoginDivTag</tag-class>对应类全名
<body-content>empty</body-content>
<attribute>
<name>login</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>ss
</taglib>--
前台类文件 用来处理在JSP页面中使用自定义便签时传入的参数
import org.apache.struts2.components.Component;
import org.apache.struts2.views.jsp.ComponentTagSupport;
public class LoginDivTag extends ComponentTagSupport {
private Boolean login;
public Boolean getLogin()
{
return login;
}
public void setLogin(Boolean login)
{
this.login = login;
}
@Override
public Component getBean(ValueStack arg0, HttpServletRequest arg1,
HttpServletResponse arg2) {
return new LoginDiv(arg0,arg1);
}
protected void populateParams() {
super.populateParams();
LoginDiv loginDiv = (LoginDiv) component;
loginDiv.setLogin(login);
}
LoginDiv。java: 后台类文件。
public class LoginDiv extends Component {
×××××××××××××
private Boolean login;
public Boolean getLogin()
{
return login;
}
public void setLogin(Boolean login)
{
this.login = login;
}
private HttpServletRequest request;
@Override
public boolean start(Writer writer) {
boolean result = super.start(writer);
try
{
**********
// 标签数据处理
if(login)//已经登录
{
********loginStr
}else
{
×××××××××××statusStr
}
//构造登录框
×××××××××loginStr
//构造状态框
×××××××statusStr
writer.write(loginStr.toString() + statusStr.toString()); //构造好页面结构 里面的数据也能时构造好后。写给浏览器
} catch (Exception e)
{
logger.error("登录框标签出错!", e);
}
return result;
}
public LoginDiv(ValueStack stack, HttpServletRequest request)
{
super(stack);
this.request = request;
}
注意的地方: 如果页面中的结构经常变换那么就不要在代码中吧页面结构也写进行。-- 否则将一旦变换维护量就比较大。
构造的标签里的页面的样式class=? 这个样式名字可以先有前台制定好了。在代码中就可以写死,而不用在作为一个属性