问题场景:我们在使用el表达式对后台返回的值进行进一步操作的时候会遇到一些问题,使用js可以处理,但是回显在标签里面就遇到了问题,此处使用自定义标签就可以很完美的解决此问题。
以下提供的是实际场景中的解决办法(将一连串的数字按照每3位加一个逗号返回最终想要的值)
1、写java工具方法类
/**
* 返回每3位加一个逗号的字符串
*
* @param data 具体的数据
* @return
*/
public static String displayWithCommaJsp(Integer data) {
try {
String str2 = "";
if (data != null) {
//因为data是integer的,有可能是负值
if (data > 0) {
String str = data + "";
str = new StringBuffer(str).reverse().toString(); // 先将字符串颠倒顺序
int size = (str.length() % 3 == 0) ? (str.length() / 3) : (str.length() / 3 + 1); // 每三位取一长度
//比如把一段字符串分成n段,第n段可能不是三个数,有可能是一个或者两个,
//现将字符串分成两部分.一部分为前n-1段,第二部分为第n段.前n-1段,每一段加一",".而第n段直接取出即可
for (int i = 0; i < size - 1; i++) { // 前n-1段
str2 += str.substring(i * 3, i * 3 + 3) + ",";
}
for (int i = size - 1; i < size; i++) { // 第n段
str2 += str.substring(i * 3, str.length());
}
str2 = new StringBuffer(str2).reverse().toString();
return str2;
} else {
String str = data + "";
str = str.substring(str.indexOf("-"), str.length());
str = new StringBuffer(str).reverse().toString(); // 先将字符串颠倒顺序
int size = (str.length() % 3 == 0) ? (str.length() / 3) : (str.length() / 3 + 1); // 每三位取一长度
//比如把一段字符串分成n段,第n段可能不是三个数,有可能是一个或者两个,
//现将字符串分成两部分.一部分为前n-1段,第二部分为第n段.前n-1段,每一段加一",".而第n段直接取出即可
for (int i = 0; i < size - 1; i++) { // 前n-1段
str2 += str.substring(i * 3, i * 3 + 3) + ",";
}
for (int i = size - 1; i < size; i++) { // 第n段
str2 += str.substring(i * 3, str.length());
}
str2 = new StringBuffer(str2).reverse().toString();
return str2;
}
}
return null;
} catch (Exception e) {
return null;
}
}
/**
* 返回每3位加一个逗号的字符串
*
* @param str
* @return
*/
public static String displayWithComma(String str) {
String prefix;
String str2 = "";
try {
if (str.contains(".")) {
prefix = str.substring(str.indexOf("."), str.length());
str = str.substring(0, str.indexOf("."));
str = new StringBuffer(str).reverse().toString(); // 先将字符串颠倒顺序
int size = (str.length() % 3 == 0) ? (str.length() / 3) : (str.length() / 3 + 1); // 每三位取一长度
//比如把一段字符串分成n段,第n段可能不是三个数,有可能是一个或者两个,
//现将字符串分成两部分.一部分为前n-1段,第二部分为第n段.前n-1段,每一段加一",".而第n段直接取出即可
for (int i = 0; i < size - 1; i++) { // 前n-1段
str2 += str.substring(i * 3, i * 3 + 3) + ",";
}
for (int i = size - 1; i < size; i++) { // 第n段
str2 += str.substring(i * 3, str.length());
}
str2 = new StringBuffer(str2).reverse().toString();
return str2 + "" + prefix;
} else {
str = new StringBuffer(str).reverse().toString(); // 先将字符串颠倒顺序
int size = (str.length() % 3 == 0) ? (str.length() / 3) : (str.length() / 3 + 1); // 每三位取一长度
//比如把一段字符串分成n段,第n段可能不是三个数,有可能是一个或者两个,
//现将字符串分成两部分.一部分为前n-1段,第二部分为第n段.前n-1段,每一段加一",".而第n段直接取出即可
for (int i = 0; i < size - 1; i++) { // 前n-1段
str2 += str.substring(i * 3, i * 3 + 3) + ",";
}
for (int i = size - 1; i < size; i++) { // 第n段
str2 += str.substring(i * 3, str.length());
}
str2 = new StringBuffer(str2).reverse().toString();
return str2;
}
} catch (Exception e) {
return null;
}
}
2、添加自定义标签tld文件(放在/WEN-INF/tlds/下面)
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>JSTL 1.1 functions library</description>
<display-name>JSTL functions sys</display-name>
<tlib-version>1.1</tlib-version>
<short-name>fns</short-name>
<uri>http://java.sun.com/jsp/jstl/functionss</uri>
<function>
<description>displayWithComma</description>
<name>displayWithCommaJsp</name>
<function-class>com.longfor.plus.common.utils.StringUtils</function-class>
<function-signature>java.lang.String displayWithCommaJsp(java.lang.Integer)</function-signature>
<example>${fnsCheck:displayWithCommaJsp(key)}</example>
</function>
<function>
<!--描述属性 -->
<description>displayWithComma</description>
<!-- 方法名 -->
<name>displayWithComma</name>
<!-- 方法对应的全类名 -->
<function-class>com.longfor.plus.common.utils.StringUtils</function-class>
<!-- 格式为【返回值类型 方法名(如参类型)】 -->
<function-signature>java.lang.String displayWithComma(java.lang.String)</function-signature>
<!-- 前台调用的示例 -->
<example>${fnsCheck:displayWithComma(key)}</example>
</function>
</taglib>
3、在页面jsp中引入自定义添加的标签库
<%@ taglib prefix="fnsCheck" uri="/WEB-INF/tlds/fnsCheck.tld" %>
4、使用的地方进行引用
<td style="text-align: right;">${fnsCheck:displayWithCommaJsp(-2534324)}</td>
<td style="text-align: right;">${fnsCheck:displayWithComma(324324.234)}</td>
以下截取项目结果