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);
 }

}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值