JSTL自定义标签(对数字或者字符串返回每3位加一个逗号的函数)

问题场景:我们在使用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>

以下截取项目结果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值