JSTL函数嵌套失效,如何从指定字符串中获取@前的目标子串?
解决JSTL函数嵌套获取子串的问题
嘿,这个问题我之前也踩过坑!问题出在你嵌套JSTL函数的时候重复使用了${}表达式标记——JSTL函数的嵌套只需要一层${}包裹整个逻辑就行,内部的函数调用完全不需要再套${},否则EL解析器会报错或者无法正确识别。
正确的嵌套写法
直接把两个JSTL函数放在同一个${}里,内部函数作为外层函数的参数传递:
${fn:substringBefore(fn:substringAfter("Promote by abc@gmail.com", "by "), "@")}
这个表达式会先执行substringAfter得到abc@gmail.com,再把这个结果传给substringBefore,最终就能得到你想要的abc啦。
额外注意事项
别忘了在JSP页面的顶部导入JSTL函数标签库,否则所有fn:开头的函数都无法生效:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
替代方案(EL 3.0+)
如果你的Web容器支持Java EE 7及以上(对应EL 3.0版本),可以不用JSTL函数,直接用EL原生的字符串操作,写法更简洁:
方法1:split分割
${"Promote by abc@gmail.com".split("by ")[1].split("@")[0]}
方法2:indexOf + substring
${"Promote by abc@gmail.com".substring( "Promote by abc@gmail.com".indexOf("by ") + 3, "Promote by abc@gmail.com".indexOf("@") )}
内容的提问来源于stack exchange,提问作者Bhavik
相关产品推荐
相关产品推荐

