struts2 标签的使用

struts2 标签的使用

Struts2中实现自定义标签很简单,主要分为3步:
1.创建taglib文件(.tld),编写标签声明。
2.编写自定义标签类。
3.在页面中使用标签。
下面以一个自定义的分页标签为例,进行说明。
其实,开发自定义标签并不需要Struts2的支持,一般情况下,只需要继承javax.servlet.jsp.tagext.BodyTagSupport类,重写doStartTag,doEndTag等方法即可。这里在实现自定义标签时,继承的2个类分别是org.apache.struts2.views.jsp.ComponentTagSupport和org.apache.struts2.components.Component,ComponentTagSupport实际上是对BodyTagSupport的一次封装,看一下ComponentTagSupport类的继承关系就明了了:
Java代码
1. java.lang.Object
2. extended by javax.servlet.jsp.tagext.TagSupport
3. extended by javax.servlet.jsp.tagext.BodyTagSupport
4. extended by org.apache.struts2.views.jsp.StrutsBodyTagSupport
5. extended by org.apache.struts2.views.jsp.ComponentTagSupport
继承ComponentTagSupport类是为了获得标签中的属性值,并包装成Component对象。继承Component类是为了从Struts2中的ValueStack中获得相对应的值。


1. 创建taglib文件.microblog.tld 文件: (是否在其他配置文件中引用??项目自动找寻tld文件??)
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>microblog tags</short-name>
<uri>/microblog-tags</uri>
<display-name>microblog taglib</display-name>

<!-- 页面头部用户信息 -->
<tag>
<name>headuserinfo</name>
<tag-class>com.people.t.web.tag.HeadUserInfoTag</tag-class>
<body-content>empty</body-content>

<!-- 也可以只用以上部分,attrubute看情况 -->
<attribute>
<name>userIdVar</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue> //表示该自定义标签的某属性的值可以直接指定或者通过动态计算指定
</attribute>
<attribute>
<name>defaultUserIdVar</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>indexVar</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>


2. 编写自定义标签类:HeadUserInfoTag.java类:
//ComponentTagSupport为struts2包中的类
public class HeadUserInfoTag extends ComponentTagSupport {

private String userIdVar;
private String defaultUserIdVar;
private String indexVar;

@Override
public Component getBean(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
return new HeadUserInfo(stack, request, response);
}

@Override
protected void populateParams() {
super.populateParams();
HeadUserInfo headInfo = (HeadUserInfo)component;
// component 为继承类中的参数。
headInfo.setUserIdVar(userIdVar);
headInfo.setDefaultUserIdVar(defaultUserIdVar);
headInfo.setIndexVar(indexVar);
}

//省略getter,setter方法。
}


3。编写自定义标签类:HeadUserInfo.java类:
//Component为struts2包中的类
public class HeadUserInfo extends Component {

private String userIdVar;
private String defaultUserIdVar;
private String indexVar;
//request,response必须
private HttpServletRequest request;
private HttpServletResponse response;

public HeadUserInfo(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
super(stack);
this.request = request;
this.response = response;
}

@Override
public boolean end(Writer writer, String body) {
StringBuilder html = new StringBuilder();
String contextPath = request.getContextPath();
try{
//获得数据
Integer userId = (Integer)stack.findValue(userIdVar);
Integer defaultUserId = (Integer)stack.findValue(defaultUserIdVar);
Integer index = (Integer)stack.findValue(indexVar);

//逻辑。。。。
//组织到变量html中,最后输出此string

writer.write(html.toString());
}catch(Exception e){
logger.error("页面头部用户信息" + e.getMessage());
}
return true;
}

//省略getter,setter方法。
}

4. 在页面中使用标签:jsp中使用
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="m" uri="/microblog-tags"%>

直接使用:<m:headuserinfo userIdVar="userId" defaultUserIdVar="cookieUid" indexVar="index"/>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值