我正在尝试使用@Valid
表示法验证表单。基本上现在我只想让author
字段不为空,如果我能让它工作,我会把它扩展到其他所有字段。
这是我的豆子:
@SuppressWarnings("serial")
@Entity
@Table(name = "Document")
public class Document implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@NotNull @NotEmpty
private String author;
@NotNull
private String pubDate;
@NotNull
private String title;
@NotNull
private String editor;
private String uploadDate;
private String contentType;
private long size;
private Blob content;
//setters & getters
这是我正在使用的表格:
<form th:action="@{/upload}" method="post"
enctype="multipart/form-data">
<p>
Author: <input name="author" type="text" th:value="${doc.author}" />
</p>
<p th:if="${#fields.hasErrors('doc.author')}"
th:errors="${doc.author}">Name error</p>
<p>
Publication date: <input name="pubDate" type="text"
th:value="${doc.pubDate}" />
</p>
<p>
Title: <input name="title" type="text" th:value="${doc.title}" />
</p>
<p>
Editor: <input name="editor" type="text" th:value="${doc.editor}" />
</p>
<p>
Content: <input name="formContent" type="file"
th:value="${content.formContent}" />
</p>
<!-- <p>Content: <input name="contentFromForm" type="file" th:value="${doc.contentFromForm}"/></p>-->
<p>
<input type="submit" value="Upload" /> <input type="reset"
value="Reset" />
</p>
</form>
控制器在发送时管理表单:
@RequestMapping(method = RequestMethod.POST, value = "/upload")
public String uploadtoDB(@Valid @ModelAttribute(value = "doc") Document doc,
@ModelAttribute(value = "content") Content content, Model model, BindingResult bindingResult)
throws SerialException, SQLException, IOException {
if (bindingResult.hasErrors())
return "upload";
doc.setContent(new javax.sql.rowset.serial.SerialBlob(content.getFormContent().getBytes()));
doc.setContentType(content.getFormContent().getContentType());
doc.setSize(content.getFormContent().getSize());
doc.setUploadDate(new SimpleDateFormat("yyyy/MM/dd").format(new Date()).toString());
documentDAO.save(doc);
return "uploadOk";
}
所以基本上我使用的是NotNull
,应该通过@Valid @ModelAttribute(value = "doc") Document doc
进行检查。并且错误应该显示为:
<p th:if="${#fields.hasErrors('doc.author')}" th:errors="${doc.author}">Name error</p>
Cleary我做错了,因为当我将作者字段留空时,表单发送没有任何问题。但是我做错了什么?感谢。