如何在JSTL/AngularJS中针对特定值停用表达式语言?
解决方案
方法1:修改AngularJS的表达式分隔符
直接替换Angular默认的表达式标记,避开用户输入的{{}}。在你的Angular模块配置里添加这段代码:
angular.module('你的应用模块名', []).config(function($interpolateProvider) { // 把默认的{{}}替换成[[ ]]或者其他不冲突的符号 $interpolateProvider.startSymbol('[['); $interpolateProvider.endSymbol(']]'); });
改完之后,Angular只会解析[[ ]]包裹的内容,用户输入的{{}}就会被当成普通文本直接展示,完全不影响JSP的EL功能。
方法2:用<c:out>的HTML转义特性
<c:out>默认会转义XML特殊字符,显式开启escapeXml="true"(默认就是true,写出来更明确),把{{和}}转成HTML实体:
<c:out value="${stringValue}" escapeXml="true" />
转义后{{变成{{,}}变成}},浏览器渲染时会显示成正常的{{}},而且Angular不会把这些实体当成表达式解析。
方法3:手动转义字符串中的{{和}}
如果不想用HTML转义,用JSTL的字符串替换函数,给{{和}}加上反斜杠,让Angular忽略它们:
首先确保页面引入JSTL函数标签库:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
然后处理字符串:
<c:set var="escapedString" value="${fn:replace(fn:replace(stringValue, '{{', '\\{{'), '}}', '\\}}')}" /> <c:out value="${escapedString}" />
这样用户输入的{{.}}会变成\{{.}},Angular会把它当成普通文本,不会尝试解析里面的内容。
内容的提问来源于stack exchange,提问作者Jad Chahine
相关产品推荐
相关产品推荐

