读书人

Struts2开发自定义标签的应用编

发布时间: 2013-01-22 10:23:54 作者: rapoo

Struts2开发,自定义标签的使用——编码自动转化为中文含义

在报表小工具助手中,有一个需求,编码列展现的还是编码,需要转换成对应的中文含义。

有几个思路:

1、直接在页面上进行判断匹配,但这种只适用于很少的编码替换,比如性别这类的。

2、想到使用自定义标签,根据自定义的规则,在标签中传入编码值,然后转化为对应的中文含义,这个可能比较通用,所以目前采取的是如此方案。

由于项目采用的是Struts2,所以导入相应的jar包,里面含有标签需要的jar。

代码实例:

1、数据库有一张编码表,关键字段如下:

codeID codeValue

编码的ID 编码的中文含义

2、JSP页面,页面上获取编码ID,需要转换成对应中文

<%@ taglib prefix="lsxy" uri="/lsxy"%>

<lsxy:Desc codeID=‘T101’ />

说明:引入自定义标签lsxy ,将需要转换的编码值传入。

3、根据页面自定义标签,定义标签结构文件 lsxy.tld 放于WEB-INF下:

lsxy.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>lsxy</short-name>
<uri>/lsxy</uri>
<display-name>"lsxy Tags"</display-name>
<!-- 编码描述标签:将编码换成对应的中文含义 -->
<tag>
<name>Desc</name>
<tag-class>lsxy.report.taglib.LsxyDescTag</tag-class>
<body-content>JSP</body-content>
<attribute>
<name>codeID</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>

说明:tag-class 说明自定义标签处理的自定义类。

4、自定义类 LsxyDescTag.java.

package lsxy.report.taglib;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import lsxy.report.service.LsxyDescTagService;
import org.apache.struts2.components.Component;
import org.apache.struts2.views.jsp.ComponentTagSupport;
import com.opensymphony.xwork2.util.ValueStack;

public class LsxyDescTag extends ComponentTagSupport {
private static final long serialVersionUID = 1L;
private String codeID;

public String getCodeID() {
return codeID;
}

public void setCodeID(String codeID) {
this.codeID = codeID;
}

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

@Override
protected void populateParams() {
super.populateParams();
LsxyDescTagService service = (LsxyDescTagService) getComponent();
service.setCodeID(getCodeID());
}

}

5、服务处理类:LsxyDescTagService.java:

package lsxy.report.service;

import java.io.Writer;
import lsxy.report.dao.ReportCodeDao;
import org.apache.struts2.components.Component;
import com.opensymphony.xwork2.util.ValueStack;

public class LsxyDescTagService extends Component {
private String codeID;

public String getCodeID() {
return codeID;
}

public void setCodeID(String codeID) {
this.codeID = codeID;
}

public LsxyDescTagService(ValueStack stack) {
super(stack);
}

@Override
public boolean start(Writer writer) {
ReportCodeDao dao = new ReportCodeDao();
try {
writer.write(dao.getCodeDesc(codeID).toString());
} catch (Exception e) {
e.printStackTrace();
}
return super.start(writer);
}

}

读书人网 >Web前端

热点推荐