我有 Spring MVC 项目,其中视图是 html 页面。我正在控制器方法中设置模型属性,但无法在 html 视图页面上访问它。
这是我的控制器方法。
@RequestMapping(value = "/", method = RequestMethod.GET)
public ModelAndView getData() {
ModelAndView model =new ModelAndView();
model.addObject("name", "Jack");
model.setViewName("html/firstLayer.html");
return model;
}
这就是我在 html 页面中访问它的方式
<script type="text/javascript">
var name1 ='${name}' ;
console.log(name1);
</script>
但是在控制台上它正在打印 ${name},它应该打印 Jack。 任何帮助将不胜感激,谢谢。
您不能直接通过 JavaScript 来做到这一点。您需要使用 JSP 文件来检索您设置的服务器端 ModelAndView 变量。
或者您可以采用更好的解决方案。
@RequestMapping(value = "/", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public String getData() throws JsonProcessingException {
Map<String, Object> myData = new LinkedHashMap<>();
myData.put("name", "Jacky");
ObjectMapper objectMapper = new ObjectMapper();
return objectMapper.writeValueAsString(myData);
}
基本上,当您执行 get 操作时,您将返回一个字符串到客户端,然后您可以通过 ajax 调用从请求中获取该字符串,并根据需要使用 javascript 操作数据。
剧透:这是一个非常粗糙的实现。我建议将
Map
更改为一个对象,就像一个单独的类 MyDataClas
,其中包含您想要的字段,如果您使用 spring web
,您可以在类路径中添加 jackson
,而不是将对象转换为string,你可以直接返回你的类(spring会处理对象序列化为json):
@RequestMapping(value = "/", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody MyDataClass getData() {
final MyDataClass myDataClass = new MyDataClass();
myDataClass.setName("Jacky");
return myDataClass;
}
这看起来比第一个更好,也更干净。
您可以查看一些与此相关的教程,以更好地了解其工作原理这里
在 html 中我们可以使用模型值。因此,当加载文档时,名称将在页面中显示为隐藏字段。使用 javascript 或 jquery 我们可以访问它。这是一个例子:
<input type="hidden" id="name" value='${name}'/>
<script type="text/javascript">
var name"1 = $(#name).val();
console.log(name1);
</script>