如何 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;
}