Thymeleaf: 如何在Thymeleaf中使用JavaScript的布尔运算符

5

我正在使用thymeleaf,在javascript中使用th:inline="javascript",但是当我们在java script中添加布尔条件时,thymeleaf会抛出以下异常:

org.xml.sax.SAXParseException; lineNumber: 14; columnNumber: 22; The entity name must immediately follow the '&' in the entity reference.
com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203)
com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177)
com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:441)
com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:368)
com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1436)
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEntityReference(XMLDocumentFragmentScannerImpl.java:1845)
.............................

以下是我的JavaScript代码:
<script type="text/javascript" th:inline="javascript">
    $(document).ready(function(){
        $('.fancybox').fancybox({
            'width' :'623px',
            'maxHeight':'156px'
        });

        var catId = $("#category").val();
        if(catId != null && catId != ''){
            findSubCategories();
            /*<![CDATA[*/
                var subCatId = /*[[${searchProductDto.subCategory}]]*/
            /*]]>*/
            debugger;
            if(subCatId != null){
                $("#subCategory").val(subCatId);
            }
        }
    });
...............................

我们在Thymeleaf中如何使用&运算符?

2个回答

20

<![CDATA[块包裹if语句块

<script type="text/javascript" th:inline="javascript">
var a =b = true;
/*<![CDATA[*/
if(a && b){
    alert('Yea');
}/*]]>*/
</script>

如果我们在if条件语句中使用&amp;,浏览器会抛出错误。 - Harmeet Singh Taara
@HarmeetSinghTaara:更新了我的回答..如果你还有问题,请告诉我。 - Jayaram
正确,但我认为没有理由仅将选定的块包装到CDATA部分中。只需始终包装整个JS代码即可。还要注意,像这样正确处理特殊字符(在此处使用CDATA的帮助)纯粹是XML的事情,无论您使用Thymeleaf还是另一个基于XML的工具都需要这样做。 - Petr Bodnár

2

script 标签的整个内容周围使用 <!CDATA[ 保护。


@HarmeetSinghTaara,你发布的代码中没有使用CDATA;你只是在内联变量周围使用了它。 - chrylis -cautiouslyoptimistic-

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接