Spring MVC Thymeleaf:通过页面传递对象

我正在使用spring MVC和thymeleaf开发一个简单的Web应用程序 . 我的控制器中有一个由此方法正确处理的表单

@RequestMapping(value = "/list", method = RequestMethod.POST)
public ModelAndView searchJob(
        @ModelAttribute(SEARCH_PARAMS) @Valid SearchParams params,
        BindingResult bindingResult) {
    ModelAndView output = null;

    if (!bindingResult.hasErrors()) {

        JobsAPIImplService service = new JobsAPIImplService();
        JobsAPI api = service.getJobsAPIImplPort();

        ArrayList<NoaJob> jobs = (ArrayList<NoaJob>) (api.search(JobUtils.toSearchParams(params))).getItem();

        output = new ModelAndView("scheduler/list");
        output.addObject("jobs", jobs);
    } else { 
     // errors handling
    }

    return output;
}

所以在我的结果页面中,我可以通过这种方式访问ArrayList“jobs”:

<tr th:each="job : ${jobs}">
    ...
</tr>

在同一页面中,我有一个简单的链接,它在同一个控制器上调用另一个GET方法 . 这里的目标是在另一个页面中具有相同的ArrayList,以便实现“后退”按钮而无需重新执行搜索逻辑(对Web服务的调用) . 这是调用的方法

@RequestMapping(value="/list/{id}", method = RequestMethod.GET)
public ModelAndView details(@PathVariable("id") String jobUuid,
        @ModelAttribute("jobs") ArrayList<NoaJob> jobs) {
    ModelAndView output = new ModelAndView("scheduler/details");

    LOGGER.info("Size jobs list: " + jobs.size());

    NoaJob job = new NoaJob();
    job.setJobUuid(jobUuid);
    output.addObject("job", job);
    output.addObject("jobs", jobs);

    return output;
}

问题是这里的arraylist总是空的!我在GET请求中读到Spring会分配一个新的ModelAttribute,那么如何通过页面传递这个对象呢?

回答(1)

2 years ago

在控制器的头部定义这样的会话属性:

@SessionAttributes({ "myFancyList"})
    @Controller
    public class HomeController {
      // your code here
    }

现在..当您必须插入“列表”以通过百里香叶可见时:

output.addObject("myFancyList", jobs);

并相应地修改thymleaf伪代码 .

在搜索的“帖子”中“覆盖”具有当前搜索结果的会话属性 .

我认为这应该为你做的伎俩