如何对<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
相关产品推荐
相关产品推荐

