ajax请求后模型属性不可用

时间:2017-09-04 13:49:59

标签: javascript jquery spring-boot thymeleaf

我有一个百里香[{1}}我以标准方式访问我的模型属性:

index.html

现在我执行<body> <th:block th:text="${myModel}"></th:block> </body> 并从我的控制器获取另一个ajax request并将其设置为我的html part

index.html

ajax请求和页面呈现按预期工作。但是在html的这部分中,我无法访问我之前的设置 @GetMapping(value="/part") public String getPart(Model model) { model.addAttribute("somePart", "hello partial html!"); return "part"; } 。有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:0)

首先抱歉我正在使用手机。 XHR请求的行为与Spring MVC中的常规Http请求不同。使用Ajax获取模型属性有点困难,因为Ajax不期望视图(模型注入其数据)。您有2个选择来解决您的问题。

1-最简单的方法是,将您的数据直接添加到响应正文中,使用“@ResponseBody”注释您的处理程序并返回您想要的数据而不是视图名称。

2-有点扭曲,你的处理程序方法应该返回一个'ModelAndView',但Ajax将收到完整的视图,当我说“完整视图”时,我指的是你想要渲染模型的视图中的所有文本。

如果您没有看到我的意思,我会编辑此答案以添加一些代码。

<强> CODE

我做了测试:

@GetMapping( "/part" )
public ModelAndView getPart( Map<String, String> model ) {
    model.put( "somePart", "hello partial html!" );
    return new ModelAndView( "part", model ); // part = the view name
}

观看代码part.html

<div>
   <h1>This is the view containing the model : ${somePart} </h1>
   <p>With other information....</p>
   <p>Please note that this view doesn't contain neither "head" nor "body" tags</p>
</div>

Ajax电话:编辑2

$(function(){
    var myModel = "${myModel}"; //get the value of your previous model
    $.get("part",function(data){
        $("div.show-part-view").html(data);//in index.html add a div tag with class="show-part-view"
        $("p.my-model").html(myModel); // in the part.html view add <p class="my-model">...
});

index.html中将<div class="show-part-view">...</div>添加到您想要的位置。

结果:  https://i.stack.imgur.com/iGzgg.jpg