thyymleaf Fragments:如何将String传递给Fragment作为onchange方法使用



我有一个问题,我的百里叶内容文件和它使用的片段文件之间的关系。从内容文件中,我将许多参数传递给成功呈现的片段。然而,一个不能工作的参数是我传递的一个字符串,它将被用作onchange方法。我得到的错误是Method call: theMethod() cannot be found...这里是内容文件的简化片段,我将其称为content.html:

<div>
<span th:replace="inputs::myInput('idExample', 'theMethod()')"></span>
</div>

然后这里是片段文件的简化片段我将其命名为fragment。html:

<span th:fragment="myInput(id, onchange)">
<select th:id="${id}" th:onchange="${__${onchange}__}">
...
...
...
</select>
</span>

现在,method()在.js文件中定义,我已经尝试直接包括在content.html和fragment.html文件中作为src,并且它仍然给出无法找到方法调用的相同错误。即使我直接在content.html和/或fragment.html中定义了theMethod()函数,它仍然会给出相同的错误。所以我在想也许我在th:onchange中的结构可能是不正确的,但我不确定。例如,${__${}__}结构可能是错误的,因为我不太熟悉详细的thyymeleaf语法。

${__${onchange}__}正在尝试运行${theMethod()}作为Thymeleaf代码-这是有Thymeleaf解释器试图运行java函数theMethod()

话虽如此,如果您将其更改为th:onchange="${onchange}",您可能会遇到错误Only variable expressions returning numbers or booleans are allowed in this context, any other datatypes are not trusted in the context of this expression

Thymeleaf真的不希望您尝试构建JavaScript表达式并在html属性中输出它们,因为这会导致安全漏洞。解决这类问题的典型方法是将函数参数传递给th:data-*属性然后像这样硬编码JavaScript:

<select th:data-id="${id}" th:data-name="${name}" onchange="onChange(this.getAttribute('id'), this.getAttribute('name'))">

这可能直接适用于这里,也可能不直接适用于这里——因此,如果不重组处理onChange事件的方式,就没有简单的方法来解决问题。

最新更新