在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;//数值
@Override
public 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"/>