使用Thymelaf从Spring模型中设置JavaScript变量
Setting up a JavaScript variable from Spring model by using Thymeleaf
我使用Thymelaf作为模板引擎。如何将变量从Spring模型传递到JavaScript变量?
弹簧侧:
@RequestMapping(value = "message", method = RequestMethod.GET)
public String messages(Model model) {
model.addAttribute("message", "hello");
return "index";
}
客户端:
<script>
....
var m = ${message}; // not working
alert(m);
...
</script>
根据官方文档:
<script th:inline="javascript">
/*<![CDATA[*/
var message = /*[[${message}]]*/ 'default';
console.log(message);
/*]]>*/
</script>
Thymelaf 3现在:
-
显示常数:
<脚本th:inline=";javascript">var MY_URL=/*[[${T(com.xyz.constants.Fruits).cheley}]]*/〃";<脚本>
-
显示变量:
var消息=[[${message}]];
-
或者在以静态方式打开模板文件(不在服务器上执行)时,在注释中使用有效的JavaScript代码。
Thymelaf称之为:JavaScript自然模板
var message=/*[[${message}]]*/";
Thymelaf将忽略我们在注释之后和分号之前所写的所有内容。
更多信息:http://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#javascript-内联
var message =/*[[${message}]]*/ 'defaultanyvalue';
根据文档,有几种方法可以进行内联
你必须根据情况选择正确的方式。
1) 只需将服务器中的变量放入javascript:
<script th:inline="javascript">
/*<![CDATA[*/
var message = [[${message}]];
alert(message);
/*]]>*/
</script>
2) 将javascript变量与服务器端变量相结合,例如,您需要在javascript中创建请求链接:
<script th:inline="javascript">
/*<![CDATA[*/
function sampleGetByJquery(v) {
/*[+
var url = [[@{/my/get/url(var1=${#httpServletRequest.getParameter('var1')})}]]
+ "&var2="+v;
+]*/
$("#myPanel").load(url, function() {});
}
/*]]>*/
</script>
我无法解决的一种情况-然后我需要在模板内的Java方法调用中传递javascript变量(我想这是不可能的)。
确保页面上已经有thymleaf
//Use this in java
@Controller
@RequestMapping("/showingTymleafTextInJavaScript")
public String thankYou(Model model){
model.addAttribute("showTextFromJavaController","dummy text");
return "showingTymleafTextInJavaScript";
}
//thymleaf page javascript page
<script>
var showtext = "[[${showTextFromJavaController}]]";
console.log(showtext);
</script>
我见过这种东西在野外工作:
<input type="button" th:onclick="'javascript:getContactId(''' + ${contact.id} + ''');'" />
如果使用Thymelaf 3:
<script th:inline="javascript">
var username = [[${session.user.name}]];
</script>
如果您需要显示未显示的变量,请使用以下格式:
<script th:inline="javascript">
/*<![CDATA[*/
var message = /*[(${message})]*/ 'default';
/*]]>*/
</script>
注意包裹变量的[(
括号。
另一种方法是创建一个由java控制器返回的动态javascript,如thymelaf论坛中所写:http://forum.thymeleaf.org/Can-I-use-th-inline-for-a-separate-javascript-file-td4025766.html
处理此问题的一种方法是使用URL嵌入其中。以下是步骤(如果您使用的是SpringMVC)
@RequestMapping(path = {"/dynamic.js"}, method = RequestMethod.GET, produces = "application/javascript")
@ResponseStatus(value = HttpStatus.OK)
@ResponseBody
public String dynamicJS(HttpServletRequest request) {
return "Your javascript code....";
}
假设请求属性名为"消息":
request.setAttribute("message", "this is my message");
使用Thymelaf模板在html页面中阅读:
<script>
var message = "[[${message}]]";
alert(message);
</script>
- Gulp设置javascript对象
- 能够在指向本地环境的浏览器中设置JavaScript断点
- 设置javascript函数中文本框的值
- 没有通过ajax调用设置Javascript全局变量
- 设置Javascript倒计时计时器的初始值
- 如果为null,则设置javascript变量的值
- 如何在我用作参数的函数中设置Javascript中的本地变量
- 在 shopify 上设置JavaScript弹出窗口的样式
- 在 for 循环中设置 Javascript 变量
- 设置JavaScript变量以稍后检查定义
- 在Ruby Slim文件中设置Javascript类型
- 设置JavaScript数组
- 设置javascript对象多级属性的简单方法
- 如何正确设置 JavaScript 命名空间和类
- 在代码隐藏中从DataTable设置javascript数组
- 使用Set属性在JSP:UseBean中设置javascript变量值
- 如何设置javascript中引用的文档的URL
- MVC 5视图-设置Javascript变量
- 如何设置javascript闭包的上下文
- 设置javascript文件的版本.Java EE+Tomcat