【问题标题】:Escaping ampersand in custom attribute using Thymeleaf 3?使用 Thymeleaf 3 在自定义属性中转义 & 符号?
【发布时间】:2026-01-19 06:30:01
【问题描述】:

在生成自定义属性时是否可以进行基本的转义(在我的例子中是 & 符号)?我尝试了很多方法(对所有动态属性使用普通转义,th:text,th:utext,th:attr,在我的 Spring 代码中替换自定义标签),不幸的是找到了一些解决方法,如下所示。

基本上,它是关于一个带有 Thymaleaf 3 模板的 AngularJS 应用程序:

<script th:inline="javascript">     
    function customSubmit() {
        /*<![CDATA[*/   
        return /*[(${DIALOG_NAME} + '.$valid && submit()')]*/ null;
        /*]]>*/ 
    }       
</script>

<form th:name="${DIALOG_NAME}"
    th:action= "'/' + ${MODULE} + '.' + ${DIALOG_NAME}"
    th:ng-app="${DIALOG_NAME} + 'App'"
    th:ng-controller="${DIALOG_NAME} + 'Controller'"
    ng-submit="customSubmit()"
      ...
    >  
...
</form>

我想要做的是一个类似的结构

th:ng-submit="some Thymeleaf expression"

生成带有 && 的自定义属性值:

ng-submit="someDialog.$valid && submit()"

没有任何函数重定向,如上述解决方法。

除了扩展 Thymeleaf(我使用的是 SpringStandard 方言)之外,还有什么直接的方法可以生成这样的字符串吗?

感谢您的任何建议。

【问题讨论】:

    标签: thymeleaf


    【解决方案1】:

    与号 (&) 应该在标签属性中进行 HTML 转义,因此您可以这样做:

    th:attr="ng-submit='some thymeleaf with &amp;&amp; in it'"
    

    编辑: 如果您还想在最终表单属性值中引用某个模型属性的值,则必须使用如下表达式预处理:

    <form th:attr="ng-submit='__${DIALOG_NAME}__' + ' some ampersand &amp;&amp; in it'">
    </form>
    

    【讨论】:

    • 谢谢你的建议,也试过了。 “&”只是转换为“&amp”..
    • 好的,让我们通过简单的小步骤来完成。如果您在表单中输入与我在回复中输入的 th:attr 相同的结果,那么结果是什么。让我们先看看这个,然后尝试在工作示例中添加模型属性
    • 我还编辑了我的回复并添加了一个额外的示例
    • 使用 th:attr 我写:&lt;FORM th:name="${DIALOG_NAME}" th:action= "'/' + ${MODULE} + '.' + ${DIALOG_NAME}" th:ng-app="${DIALOG_NAME} + 'App'" th:ng-controller="${DIALOG_NAME} + 'Controller'" th:attr="ng-submit='__${DIALOG_NAME}__' + ' some ampersand &amp;amp;&amp;amp; in it'" method="post"&gt;,我得到:&lt;FORM name="someDialog" action= "/admin.someDialog" ng-app="someDialogApp" ng-controller="someDialogController" method="post" ng-submit="someDialog some ampersand &amp;amp;&amp;amp; in it"&gt;
    • 请告诉我您使用的确切百里香叶版本