我有一个用户实体:
@Entity
@Table(name = "user")
public class User implements Serializable{
private enum Sex {MALE, FEMALE};
@Id @GeneratedValue
private Long id;
@NotNull
private String name;
@NotNull
private String password;
}
控制器:
@Controller
public class HomeController {
@RequestMapping("/addUser")
public String showHomePage(Map<String, Object> map) {
map.put("user", new User());
return "addUser";
}
并在jsp文件中形成
<form:form method="post" action="add" commandName="user">
<form:input path="name"/>
<form:input path="password"/>
<form:input path="confirm-password"/>
</form:form>
此表单生成错误,因为confirm-password
中没有User.class
字段。我当然可以将confirm-password
字段作为@Transient
添加到User.class
,但如果我想将captcha字段添加到表单中,该怎么办呢?是否有另外一种方法可以添加额外的字段来形成?
答案 0 :(得分:0)
将模型用作表单实体不是一个好习惯。您应该有一个bean或表单类来从视图中获取数据,而另一个用于模型。
原因是他们有不同的责任,因此需要映射到不同的类。它们通常非常相似,但这种分离促进了更清晰的编码并避免了安全漏洞,因为用户可以尝试使用请求篡改器(例如火灾bug)从视图中使用模型变量。
他们之间的这些小差异就像你上面列出的那样,证明了另一个类的创造。