You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对<c:forEach>遍历生成的input标签字段值进行掩码处理?

实现Input值的AB****CD格式掩码

这里有几种实用的方法,帮你把JSP中input标签里的数值转换成类似AB****CD的掩码格式:

方法1:直接用JSTL函数在前端处理

首先确保你的JSP页面已经引入了JSTL的函数标签库:

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

然后在循环里通过<c:choose>判断字符串长度,动态生成掩码值:

<c:forEach var="attribs" items="${status.value}">
  <input type="text" name="cust_name" value="
    <c:choose>
      <%-- 当字符串长度大于4时,显示前2位+****+后2位 --%>
      <c:when test="${fn:length(attribs.value) > 4}">
        ${fn:substring(attribs.value, 0, 2)}****${fn:substring(attribs.value, fn:length(attribs.value)-2, fn:length(attribs.value))}
      </c:when>
      <%-- 处理长度≤4的情况,这里示例用全掩码,你可以根据需求调整,比如显示首尾各1位+**** --%>
      <c:otherwise>
        ****
      </c:otherwise>
    </c:choose>
  ">
</c:forEach>

这种方法适合快速实现,不需要改动后端代码,但如果掩码规则复杂,前端代码会显得臃肿。

方法2:后端提前处理掩码值

更推荐的方式是在Java后端把原始值转换成掩码后的值,再传递到前端。这样前端代码更简洁,规则也更容易维护。

先写一个工具方法:

public static String generateMaskedString(String original) {
    // 处理null或空字符串的情况
    if (original == null || original.trim().isEmpty()) {
        return "";
    }
    int length = original.length();
    if (length <= 4) {
        // 长度较短时的处理逻辑,比如全掩码或显示首尾
        return "****";
    }
    // 截取前2位和后2位,中间用****连接
    return original.substring(0, 2) + "****" + original.substring(length - 2);
}

然后在后端组装数据时,给每个attribs对象添加一个maskedValue属性,赋值为调用上述方法后的结果。前端直接使用这个处理好的值:

<c:forEach var="attribs" items="${status.value}">
  <input type="text" name="cust_name" value="<c:out value='${attribs.maskedValue}'/>">
</c:forEach>

这种方式的优势在于逻辑集中在后端,方便统一修改掩码规则,也避免了前端处理复杂表达式的问题。

方法3:自定义EL函数复用掩码逻辑

如果你的项目中有多个地方需要用到这种掩码规则,可以封装成自定义EL函数,在JSP中直接调用,代码更优雅。

步骤1:编写工具类

创建一个包含静态掩码方法的Java类:

package com.yourcompany.utils;

public class MaskHelper {
    public static String maskText(String original) {
        if (original == null || original.length() <= 4) {
            return "****";
        }
        return original.substring(0, 2) + "****" + original.substring(original.length() - 2);
    }
}

步骤2:创建TLD文件

在WEB-INF目录下创建一个mask.tld文件,定义EL函数:

<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
        version="2.1">
    <tlib-version>1.0</tlib-version>
    <short-name>mask</short-name>
    <uri>http://yourcompany.com/tags/mask</uri>
    <function>
        <name>maskText</name>
        <function-class>com.yourcompany.utils.MaskHelper</function-class>
        <function-signature>java.lang.String maskText(java.lang.String)</function-signature>
    </function>
</taglib>

步骤3:在JSP中使用

先引入自定义标签库:

<%@ taglib prefix="mask" uri="http://yourcompany.com/tags/mask" %>

然后在循环里直接调用函数:

<c:forEach var="attribs" items="${status.value}">
  <input type="text" name="cust_name" value="<c:out value='${mask:maskText(attribs.value)}'/>">
</c:forEach>

这种方法适合需要在多个JSP页面复用掩码逻辑的场景,代码复用性更高。


内容的提问来源于stack exchange,提问作者Hariom Yadav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:21:50