我的应用程序基本上是一本字典。当我单击“提交”时,一个新的 Word 对象将与其几个字段一起保存到数据库中。其中一个字段称为类别,它显示 Word 属于哪个组。当前,此值是 Word 对象的字符串字段。
这是 jsp.file 的简化代码
<form:form method="post" action="addNewWord.html" commandName="word" >
<table>
//many other fields;
<tr>
<td>Category:</td>
<td><form:select path="category" items="${CATEGORIES}"
var="cat">
</form:select></td>
<td><form:errors path="category" cssClass="error" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="Add new word" /></td>
</tr>
</table>
</form:form>
这是 Word 对象。
@Entity
@Table(name = "word")
public class Word {
//other instance variables either primitives or Strings;
@Column(name = "category", nullable = false, length = 80)
private String category;
//getters-setters
在这种情况下,一切都很好并且运行良好,并且 Word 对象被保存到数据库中。但是,如果我决定创建一个独立的 Category 对象并且 Word 对象中的 category 字段不是 String 而是 Category 的一个实例,该怎么办?
@ManyToOne
@JoinColumn(name = "category_id")
private Category category;
我应该如何修改 .jsp 文件上的表单以提交具有不是字符串而是类别的字段的词对象?就整体而言,让我展示一下提交调用的控制器中的方法:
@RequestMapping(value = "/addNewWord", method = RequestMethod.POST)
public String addNewWord(@ModelAttribute Word word, BindingResult result, Model model) {
WordValidator validator = new WordValidator();
validator.validateWord(word, result, wordService.getAllWord(), categoryService.getAllCategories());
if (!result.hasErrors()) {
wordService.save(word);
word.clearValues();
}
fillCategoryNames(model);
return "addNew";
}
我有一种感觉,我应该使用@InitBinder 方法,但我不知道如何使用,这更像是一种感觉,而不是坚如磐石的事实。欢迎任何建议。