JSP 自定义标签实现数据精度格式化

来源:互联网 发布:js压缩还原 编辑:程序博客网 时间:2024/05/02 03:03

   在java web 开发中,以jsp作为页面显示的环境,jsp标签的使用大大简化了页面对后台数据的操作,但是对于一些特殊的要求,可以根据需求自定义标签实现。废话少说,直接上步奏代码。

开发工具:Eclipse Luna

整体架构:spring spring mvc mybatis


1.新建一个实体类,声明属性,并继承TagSupport类

public class NumberTag extends TagSupport {private static final long serialVersionUID = -2312310581852395045L;private String pattern;//数值单位private String value;//数值@Overridepublic int doStartTag() throws JspException {String unit =pattern;BigDecimal b = new BigDecimal(value);//值String s = NumberUnit.getBwNumberValue(b,unit);try {pageContext.getOut().write(s);} catch (IOException e) {e.printStackTrace();}return super.doStartTag();}public void setValue(String value) {if(value.isEmpty()){value=0.00+"";}this.value = value;}public void setPattern(String pattern) {this.pattern = pattern;}}

2.数值单位换算类 NumberUnit.java

public class NumberUnit{/*** * * @Title: getBwNumberValue * @Description: TODO   格式化数据* @param num 值* @return* @throws */public static String getBwNumberValue(BigDecimal num,String tunit){ DecimalFormat df=(DecimalFormat)NumberFormat.getInstance();  df.setMaximumFractionDigits(2); df.applyPattern("0.00"); double total = num.doubleValue(); String value=total+""; if(tunit.equalsIgnoreCase("Mbps")){value=df.format(total);}else if(tunit.equalsIgnoreCase("Gbps")){value=df.format(total/1000);} return value;}}


3.编写numbertag.tld文件

<?xml version="1.0" encoding="UTF-8"?><taglib><tlib-version>1.0</tlib-version><jsp-version>1.2</jsp-version><tag><name>mynumber</name> <!--自定义标签名称---><tag-class>xx.xx.xx.NumberTag</tag-class><!--自定义标签类全路径---><body-content>JSP</body-content><attribute><name>value</name><required>true</required><rtexprvalue>true</rtexprvalue></attribute><attribute><name>pattern</name><required>true</required><rtexprvalue>true</rtexprvalue></attribute></tag></taglib>  

4.jsp页面引用

导入标签: <%@ taglib prefix="mynumberfmt" uri="/WEB-INF/numbertag.tld"%>

使用自定义标签:<mynumberfmt:mynumber value="${datalist.data }" pattern="0.00"/>


0 0