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

Spring MVC + Thymeleaf: passing objects through pages

我正在使用 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>

在同一页面中,我有一个简单的 link,它调用同一控制器上的另一个 GET 方法。这里的目标是在另一个页面中拥有相同的 ArrayList,以便在不重新执行搜索逻辑(调用 Web 服务)的情况下实现 "back" 按钮。 这里是调用的方法

@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;
}

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

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

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

现在.. 当您必须插入 "list" 才能通过 thymeleaf 查看时:

output.addObject("myFancyList", jobs);

并相应地修改 thymleaf 伪代码。

在搜索的"post"中"override"会话属性与当前搜索结果..

我认为这应该对你有用