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"会话属性与当前搜索结果..
我认为这应该对你有用
我正在使用 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"会话属性与当前搜索结果..
我认为这应该对你有用