使用 Thymeleaf 调用 Javascript 函数

Posted

技术标签:

【中文标题】使用 Thymeleaf 调用 Javascript 函数【英文标题】:Javascript function call with Thymeleaf 【发布时间】:2014-12-18 23:59:57 【问题描述】:

我需要在 thymeleaf 模板上调用一个 javascript 函数,如下所示:

案例一:

<select th:onclick="$'function1('a')'">

但在这种情况下,百里香不起作用..一些研究前(包括***)我得到以下“解决方案”:

案例2:

<select th:onclick="$'function1(''a'')'">

案例3:

<select th:onclick="$'function1(\'a\')'">

案例4:

<select th:onclick="$'function1(\''+'a'+'\')'">

但在所有情况下,我都会收到相同的错误:“...异常评估 SpringEL 表达式...”

我的问题是关于 javascript 调用,我需要在 js 函数中添加一些参数 $var 来调用。我该如何解决?

谢谢

【问题讨论】:

【参考方案1】:

如果您在 JS 函数调用中不需要任何动态变量,可以这样做:

th:onclick="'alert(\'a\');'"

这只是对单引号进行了转义,并且不需要 SpringEL(当然,在这种情况下您可以省去 thymeleaf 属性,而只需使用普通的 onclick)。

要在其中插入变量:

th:onclick="'alert(\'' + $myVar + '\');'"

使用警报功能让我尝试并证明它有效。希望对您有所帮助。

【讨论】:

谢谢,这个概念对我有用,我确实使用过:th:attr="onchange='javascript:addAttr(\''+$poi.id+'\', this.value )'"【参考方案2】:

您需要调用下面提到的javascript函数。

th:onclick="'javascript:function1(\''+ $a +'\');'"

我认为这对你有帮助。

【讨论】:

如果函数内部有两个值如何发送?【参考方案3】:

试试这个。

th:onclick="$'javascript:functionXXX(' + obj.id + ')'"

【讨论】:

【参考方案4】:

据我所知,你有两种可能:

    使用双括号

    <body th:onload="showToast([[$toast]])">
    ...
    </body>
    

然后JS函数是这样的

function showToast(toast) 
    M.toast(html: toast);

    使用数据属性

    <body th:data-toast="$toast" th:onload="showToast()">
    ...
    </body>
    

以及相应的JS函数

function showToast() 
    var toast = document.querySelectorAll('body')[0].getAttribute('data-toast');
    M.toast(html: toast);

【讨论】:

【参考方案5】:

html5 的另一种“新”方式,使用数据属性:

th:data-url="@/yourUrl" th:onclick="window.location.href=this.getAttribute('data-url')"

【讨论】:

【参考方案6】:

一种方法是使用字符[[' y ']]

例如,我将显示变量“startDate”的内容,它是一个日期类型,格式为dd/MM/yyyy HH:mm:ss',以使用“警报”功能显示。

<input type="button" th:onclick="alert([[$#dates.format(processInstance.startDate, 'dd/MM/yyyy HH:mm:ss')]]);" />

输出是这样的:

22/02/2019 15:43:02

【讨论】:

【参考方案7】:

我是这样做的:

<td><a href="#" th:onclick="@'deletetag(' + $tag.id + ');'"><i class="nav-icon fas fa-trash"></i></a></td>

还有一个简单的&lt;script&gt;&lt;/script&gt;里面的deletetag函数

【讨论】:

值得点赞【参考方案8】:

在JS中发送两个值:

function openGate(IP,Port) 
   // Some operations with parameters IP and Port



<button id="open" type="button" th:onclick="'openGate(\'' +$gate.gateIp +'\',\''+$gate.gatePort+'\')'"  class="btn btn-warning">Open the gate</button>

在 thymeleaf onclick 中,我们使用配额作为参数。 所以源页面看起来

<button id="open" type="button" onclick="openGate('192.168.10.10','9938')"  class="btn btn-warning">Open gate</button>

【讨论】:

【参考方案9】:

在某些情况下,我们可能更喜欢将表达式直接写入 HTML 文本。当我们的目标是将变量直接写入 javascript 函数时,它会派上用场。

[[...]] 或 [(...)] 之间的表达式在 Thymeleaf 中被视为内联表达式,在它们内部,我们可以使用在 th:text 中也有效的任何类型的表达式。

一个简单的例子,如果你想调用 javascript function1 来提醒'a'变量。

<script>

function function1(a)
      alert(a);


</script> 

然后在thymeleaf中你可以拨打:&lt;button th:onclick="javascript:function1([[$a]]);"&gt;Send&lt;/button&gt;

您可以在 12.1 Expression inlining 部分的 Thymeleaf 文档中找到这些信息,或者在 baeldung.com/spring-thymeleaf-css-js 有一篇包含大量有用示例的好文章。

【讨论】:

【参考方案10】:

您好,我遇到了同样的问题,我遇到的问题是函数未定义,因为我的函数在 thymleaf 文件中 我用过&lt;button th:onclick="javascript:function1()"&gt;Send&lt;/button&gt; 我也使用了上面提到的解决方案,但对我不起作用 所以我将几乎所有的 JavaScript 函数都复制到了一个单独的 JS 文件中,该文件位于 &lt;project_name&gt;/src/main/resources/public/js/main.js

然后在我的 thymleaf 文件中我像这样链接它 &lt;script type="text/javascript" th:src="@/js/main.js" src="../static/js/main.js"&gt;&lt;/script&gt;

我这样调用我的函数:&lt;input type="checkbox" onclick="function1()" th:onclick="|function1()|"&gt;Show Password 而且效果很好

【讨论】:

以上是关于使用 Thymeleaf 调用 Javascript 函数的主要内容,如果未能解决你的问题,请参考以下文章

在 Thymeleaf 中使用 onClick 时如何将参数传递给 javascript 函数调用

使用带有 ajax Rest 调用的 Spring CSRF 和带有 Thymeleaf 的 HTML 页面

从 Thymeleaf 调用并加载 Spring MVC 控制器请求方法

是否可以使用 AJAX 调用中的成功对象并将其传递给 thymeleaf 进行迭代

尝试通过 Spring MVC 和 Thymeleaf 使用 React/Ajax 调用

使用控制器模型变量和 Thymeleaf 动态调用 messages.properties