我正在使用Spring 3和Hibernate 4來構建我的項目。繼續部分更新對象與休眠的方法
我的問題是,例如,一個用戶對象有五個字段,id,名稱,密碼,學校和地址。我只給予用戶更新/編輯他的學校和/或地址的權利。當用戶首次通過GET訪問編輯頁面時,我想用該用戶的現有信息填充該字段。
一旦提交按鈕被點擊,我想通過休眠來更改我的數據庫中相應的更新字段。
Controller.java
@RequestMapping(value="/edit/{userId}", method="RequestMethod.GET")
public String toEdit(Model model,@PathVariable int userId){
User user = userService.get(userId);
model.addAttribute("command",user);
return "/edit";
}
@RequestMapping(value="/save", method="RequestMethod.POST")
public String toSave(Model model){
//how to implement this?
}
edit.jsp文件
<form:form action="/save" method="POST">
<form:input path="school"/>
<form:input path="address"/>
<input type="submit"/>
</form:form>
我的想法是,如果我可以把未更新爲隱藏字段中文件edit.jsp,這樣,當這些領域User對象重新綁定(當提交表單時),我仍然可以捕獲用戶的ID,名稱和密碼信息。
我的方法的缺陷是顯而易見的。首先,密碼作爲隱藏領域永遠不會走。其次,它在edit.jsp頁面添加了不必要的信息。
我的第二個想法是,我只能在edit.jsp中將用戶標識設置爲隱藏字段,並且在提交表單時,我可以使用User user = userService.get(command.id)
來獲取相應的用戶對象並設置字段(例如學校或地址)通過類似user.setSchool(command.getSchool())
的那些新輸入的那些。在所有這些之後,我可以更新用戶對象。這種方法有點麻煩,因爲如果我有很多領域需要更新,會有很多代碼。
有沒有更好的方法來做到這一點? (我確定必須有一個)我對Spring和Hibernate很新,所以如果我錯過了一些非常明顯的東西,請告訴我。
謝謝。
感謝您的回覆。我試過你的方法,但它似乎沒有達到我的預期。據我瞭解,動態更新意味着只有那些修改後的字段纔會在數據庫中更新。但是,當我在更新後重新綁定值時,我實際上已經丟失了名稱/密碼的值,因爲它們不存在於表單中。你對如何應對這個問題有任何想法嗎?謝謝。 – pippo 2012-04-21 16:37:54
只要用戶的唯一標識符可用,就不需要在html表單中包含所有字段。如果用戶提交表單,則從數據庫中獲取由唯一標識符標識的用戶對象,並使用表單中的值更新字段。用戶標識符可以是數據庫ID(代理鍵)的用戶名(自然鍵)並且可以存儲在HTTP Sesssion中。也可以將整個(分離的)用戶對象存儲在HttpSession中,並將其與表單提交中的Hibernate會話重新連接。原理與上面的原理非常相似。 – andih 2012-04-21 18:18:28