org.xml.sax.SAXParseException: 在实体引用中, 实体名称必须紧跟在 '&' 后面。
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203) ~[na:1.8.0_121]
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177) ~[na:1.8.0_121]
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400) ~[na:1.8.0_121]
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327) ~[na:1.8.0_121]
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1472) ~[na:1.8.0_121]
spring boot 使用
spring-boot-starter-thymeleaf
返回页面,在js中使用&&进行判断,返回此异常,是因为thymeleaf是采用xml解析的方式进行替换的,所以javascript中&这样的xml实体转义字符会被识别为转义,所以会出sax解析错误。
xml里面我们怎么解决的?
<![CDATA[ ]]> <![CDATA[]]>标记所包含的内容为纯文本,不会进行转义
具体用法如下
/*<![CDATA[*/
if (text != null && text != "") {
alert(text);
}
/*]]>*/
thymeleaf简单使用
<!DOCTYPE HTML>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8"/>
<title>Title</title>
<script th:href="@{jquery-1.11.3.js}"></script>
<script th:inline="javascript">
var text = [[${name}]];
/*<![CDATA[*/
if (text != null && text != "") {
alert(text);
}
/*]]>*/
</script>
</head>
<body>
<h1>测试动态页面!!!</h1>
<h2 th:text="${name}"></h2>
<div th:if="${not #lists.isEmpty(list)}">
<h3>列表展示</h3>
<table>
<tbody>
<tr th:each="demo:${list}">
<td th:text="${demo.id}"></td>
<td th:text="${demo.name}"></td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
@RequestMapping("/model")
public ModelAndView model() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("home");
modelAndView.addObject("name", "测试");
List<Demo> list = new ArrayList<>();
Demo demo = new Demo("1", "小明");
Demo demo1 = new Demo("2", "小丽");
Demo demo2 = new Demo("3", "小张");
list.add(demo);
list.add(demo1);
list.add(demo2);
modelAndView.addObject("list", list);
return modelAndView;
}