2012-05-04 42 views
0

我有一個用戶實體:Spring + Hibernate的+形式

@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字段添加爲@TransientUser.class,但是如果我想將captcha字段添加到我的表單中,該怎麼辦。有沒有不同的方式來添加額外的領域來形成?

+1

請參閱http://stackoverflow.com/questions/5536024/spring-mvc-requestparam-validation – axtavt

回答

0

將模型用作表單實體並不是一個好習慣。您應該有一個bean或表單類來從視圖中獲取數據,爲模型獲取另一個數據。

原因是他們有不同的責任,因此需要映射到不同的類。它們通常非常相似,但是這種分離促進了更清晰的編碼並避免了安全漏洞,因爲用戶可以嘗試通過使用請求篡改器(例如火蟲)從視圖中使用模型變量。

它們之間的這些小差異就像上面列出的那樣,證明另一個類的創建是正確的。

+1

爲了避免很多漂浮的類,我們有這種註釋類的概念並將其用於兩個目的。在準備轉換過程中會有很多代碼循環。這也是它的一個選擇。 – raddykrish

+0

我同意你的看法,在這裏還有其他的變量需要考慮,但恕我直言,我會在標準的解決方案中進行分離。 – eduardohl