我需要将日期添加到我的实体中,然后让用户以Web形式进行设置。默认情况下,此字段需要填写今天的日期。
1. <input type="date" value="2016-08-01">
显示正确的默认日期设置
2. <input type="date" th:value="${startDate}">
显示没有任何值的日期选择器(注意:String startDate =“ 2016-08-01”;)
3. <input type="date" th:field="${startDate}">
生成400错误(错误请求)(注意:Date startDate = new Date();)
因此,问题是:如何使用百里香作为输入日期?
我的控制器:
@RequestMapping("/project_new") public String createProject(Model model) { Project project = new Project (); List<Role> roles = mRoleService.findAll(); project.setStart(new Date()); model.addAttribute("page_title", "create project"); model.addAttribute("roles", roles); model.addAttribute("statuses", Status.values()); model.addAttribute("project", project); return "project_new"; } @RequestMapping(value = "/project_new", method = RequestMethod.POST) public String createProject(@ModelAttribute Project project, Model model) { // Fill id field for project.rolesNeeded mRoleService.setRolesId(project.getRolesNeeded()); project.fixCollaboratorsAndRoles(); mProjectService.save(project); return "redirect:/"; }
我的模板:
<form th:action="@{/project_new}" method="post" th:object="${project}"> <div class="project-list single"> <label for="name">Name:</label> <input type="text" id="name" required="true" th:placeholder="*{name}" th:value="*{name}" th:field="*{name}"/> <label for="description">Description:</label> <textarea rows="5" id="description" type="text" required="true" th:placeholder="*{description}" th:value="*{description}" th:field="*{description}"/> <label for="date-started">Date started:</label> <input type="date" th:value="${project.start}" th:field="${project.start}" id="date-started"/> <div> <label for="project_status">Project Status:</label> <div class="custom-select"> <span class="dropdown-arrow"></span> <select th:field="*{status}" id="project_status"> <option th:each="s : ${statuses}" th:value="${s}" th:text="${s}">Active</option> </select> </div> </div> <div class="roles-collaborators"> <ul class="checkbox-list"> <li th:if="${role.name} ne 'Undefined'" th:each="role : ${roles}"> <input type="checkbox" th:value="${role}" th:field="${project.rolesNeeded}" class="checkbox"/> <span th:text="${role.name}" th:value="${role}" class="checkbox">Developer</span> </li> </ul> </div> <div class="actions"> <button type="submit" class="button">Save</button> <a th:href="@{/}" class="button button-secondary">Cancel</a> </div> </div> </form>
项目实体:
@Entity public class Project { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @NotNull @Size (min = 3) private String name; @Column(columnDefinition="TEXT") private String description; @Column private Status status; @Column private Date start; @ManyToMany @LazyCollection(LazyCollectionOption.FALSE) private List<Role> rolesNeeded; @ManyToMany @LazyCollection(LazyCollectionOption.FALSE) private List<Collaborator> collaborators; public Date getStart() { return start; } public void setStart(Date start) { this.start = start; }
纵观在与错误日志的评论似乎是之间的转换问题String来java.util.Date。在Thymeleaf GitHub上搜索了一段时间后,我看到了两个问题可以解释在这种情况下的处理方法:
String
java.util.Date
从最后一点开始,我在项目类的开始日期添加了注释:
// This is "org.springframework.format.annotation.DateTimeFormat" @DateTimeFormat(pattern = "yyyy-MM-dd") private Date start;
之后,我就可以通过控制器的POST方法接收日期了。
考虑到您还需要像您在and 字段中所做的那样,将模板的th:valueand th:field属性从日期值的模板更改为${project.start}to *{start},就像我在评论中所写的那样。name``description
th:value
th:field
${project.start}
*{start}
name``description