如何 return Thymeleaf 页面发送日期参数
How to return Thymeleaf page with sent Date param
我需要有关如何解决 CRUD 应用程序问题的说明。我的模型 class 具有日期字段:
@Column(name = "date", nullable = false)
@DateTimeFormat(pattern = "dd.MM.yyyy.")
private Date date;
在 Thymeleaf 模板中,日期字段被放置在使用 JQuery 日期选择器的文本字段中。该部分按预期工作。
<form th:action="@{/poetracker/addNew}" th:object="${item}" method="post" style="max-width:418px; margin:0 auto">
<div class="pt-3">
<div class="form-group row">
<label for="datepicker" class="col-sm-4 col-form-label">Датум:</label>
<div class="col-sm-8">
<input type="text" id="datepicker" th:field="*{date}" readonly autocomplete="off" class="form-control form-control-sm"/>
</div>
//some other components rendering
</div>
</form>
现在是我遇到麻烦的部分。单击提交按钮时,项目添加到数据库中,我希望重新加载表单。但是,我希望从最后添加到数据库的项目中记住日期字段(单击提交按钮之前表单中的值)。
这是我的控制器,我试过的:
@GetMapping("/addNew")
public String addNewShow(@RequestParam(name = "date", required = false)
@DateTimeFormat(iso = ISO.DATE) Date date, Model model) {
Item item = new Item();
model.addAttribute("item", item);
item.setDate(date);
return "/poetracker/addNew";
}
@PostMapping("/addNew")
public String addNew(Item item) {
itemService.addNew(item);
return "redirect:/poetracker/addNew";
}
我通过查询测试了传递日期它是否有效,但我想通过单击按钮传递。有推荐的方法吗? Java或JQuery,无所谓,只是好奇它是怎么做到的。
更新:我正在寻找这种功能:
在 .net razor-pages 中我有属性
[BindProperty(Name = "month", SupportsGet = true)]
public int? SelectedMonth { get; set; }
[BindProperty(Name = "year", SupportsGet = true)]
public int? SelectedYear { get; set; }
[BindProperty(Name = "day", SupportsGet = true)]
public int? SelectedDay { get; set; }
并且可以像这样在 Post 中重定向:
public async Task<IActionResult> OnPostAsync()
{
if (ModelState.IsValid)
{
await repository.CreateAsync(Item!);
}
return RedirectToPage("Add", new
{
day = Item!.Day, month = Item!.Month, year = Item!.Year
});
}
Java中有类似的东西吗?应该是有的,求指点。
终于解决了。这不是唯一的方法,也不完全是我的想法,但它提供了预期的结果。发布它,以防万一有人需要解决类似问题:
@PostMapping("/addNew")
public String addNew(Item item) {
itemService.addNew(item);
LocalDate date = item.getDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
String selectedDate = String.format("%d-%d-%d", date.getYear(), date.getMonthValue(), date.getDayOfMonth());
String route = "redirect:/poetracker/addNew?date=" + selectedDate;
return route;
}
我需要有关如何解决 CRUD 应用程序问题的说明。我的模型 class 具有日期字段:
@Column(name = "date", nullable = false)
@DateTimeFormat(pattern = "dd.MM.yyyy.")
private Date date;
在 Thymeleaf 模板中,日期字段被放置在使用 JQuery 日期选择器的文本字段中。该部分按预期工作。
<form th:action="@{/poetracker/addNew}" th:object="${item}" method="post" style="max-width:418px; margin:0 auto">
<div class="pt-3">
<div class="form-group row">
<label for="datepicker" class="col-sm-4 col-form-label">Датум:</label>
<div class="col-sm-8">
<input type="text" id="datepicker" th:field="*{date}" readonly autocomplete="off" class="form-control form-control-sm"/>
</div>
//some other components rendering
</div>
</form>
现在是我遇到麻烦的部分。单击提交按钮时,项目添加到数据库中,我希望重新加载表单。但是,我希望从最后添加到数据库的项目中记住日期字段(单击提交按钮之前表单中的值)。
这是我的控制器,我试过的:
@GetMapping("/addNew")
public String addNewShow(@RequestParam(name = "date", required = false)
@DateTimeFormat(iso = ISO.DATE) Date date, Model model) {
Item item = new Item();
model.addAttribute("item", item);
item.setDate(date);
return "/poetracker/addNew";
}
@PostMapping("/addNew")
public String addNew(Item item) {
itemService.addNew(item);
return "redirect:/poetracker/addNew";
}
我通过查询测试了传递日期它是否有效,但我想通过单击按钮传递。有推荐的方法吗? Java或JQuery,无所谓,只是好奇它是怎么做到的。
更新:我正在寻找这种功能: 在 .net razor-pages 中我有属性
[BindProperty(Name = "month", SupportsGet = true)]
public int? SelectedMonth { get; set; }
[BindProperty(Name = "year", SupportsGet = true)]
public int? SelectedYear { get; set; }
[BindProperty(Name = "day", SupportsGet = true)]
public int? SelectedDay { get; set; }
并且可以像这样在 Post 中重定向:
public async Task<IActionResult> OnPostAsync()
{
if (ModelState.IsValid)
{
await repository.CreateAsync(Item!);
}
return RedirectToPage("Add", new
{
day = Item!.Day, month = Item!.Month, year = Item!.Year
});
}
Java中有类似的东西吗?应该是有的,求指点。
终于解决了。这不是唯一的方法,也不完全是我的想法,但它提供了预期的结果。发布它,以防万一有人需要解决类似问题:
@PostMapping("/addNew")
public String addNew(Item item) {
itemService.addNew(item);
LocalDate date = item.getDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
String selectedDate = String.format("%d-%d-%d", date.getYear(), date.getMonthValue(), date.getDayOfMonth());
String route = "redirect:/poetracker/addNew?date=" + selectedDate;
return route;
}