【问题标题】:app context lost when changing the location in Thymeleaf在 Thymeleaf 中更改位置时应用程序上下文丢失
【发布时间】:2018-01-17 12:11:56
【问题描述】:

我在 Thymeleaf 模板中有这段代码,但是当我被重定向时我丢失了应用程序上下文

 $('#selectAuthorizedDriverId').change(
   function() {
      var link = "/deviceDriver/updateauthorizeddriver/" + $(this).val();
      $(location).attr('href',link);
}); 

这段代码将浏览器重定向到链接,但没有应用程序上下文,所以我得到了 404。 为了避免这个问题,我通常使用

var link = /*[[@{/deviceDriver/updateauthorizeddriver/}]]*/ + "";

它有效,但从这里我尝试过

var link = /*[[@/deviceDriver/updateauthorizeddriver/}]]*/ + $(this).val() "";

但没有成功

我看到的网址是

http://127.0.0.1:1234/deviceDriver/updateauthorizeddriver/

并且有效的 URL 应该是

http://127.0.0.1:1234/driversApp/deviceDriver/updateauthorizeddriver/

【问题讨论】:

  • 您到底需要什么?在会话之间保留一些数据?在单个会话中提供正确的重定向?产生错误的代码是什么,错误是什么?您认为在代码中哪里以及为什么需要“应用上下文”?
  • 我需要一个 GET 请求
  • 缓冲上下文怎么样? var that = this;
  • 按下按钮时看到什么url?$(this).val() 是否有有效值?
  • 是的,它有一个有效值

标签: javascript jquery html spring-boot thymeleaf


【解决方案1】:

发生这种情况的原因是 Thymeleaf 处理 javascript natural templating 的方式。

Thymeleaf 将忽略我们在评论后写的所有内容 在分号之前,所以结果 执行这个看起来就像我们不使用 包装 cmets

这样浏览器就可以查看带有 JavaScript 的 thymeleaf 模板,而无需通过 Thymeleaf 解析器运行它(没有任何 JavaScript 错误)。如果您想像上面的示例那样连接字符串,则应将它们移到自己的行中。像这样:

// Original code
var link = /*[[@{/deviceDriver/updateauthorizeddriver/}]]*/ "";
link = link + $(this).val();

// Viewed as an unparsed html file (directly in a browser)
var link = "";
link = link + $(this).val();

// Viewed when run through a thymeleaf parser
var link = "/your-context/deviceDriver/updateauthorizeddriver/";
link = link + $(this).val();

【讨论】:

  • 这个想法不是对上下文进行硬编码,无论如何,如果没有人给我解决方案而不对应用程序进行硬编码,我会接受答案。上下文
  • 如果您使用第一个标记为//Original code 的示例,它将可以工作,您无需对应用上下文进行硬编码。
猜你喜欢
  • 2016-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-05
  • 2015-04-23
  • 2019-06-05
相关资源
最近更新 更多