केवल स्प्रिंग एमवीसी मॉडल बीन का एक हिस्सा प्रदर्शित करते समय, क्या ब्राउज़र से वापस आने वाले मॉडल में केवल अपडेट करने का कोई तरीका है?स्प्रिंग एमवीसी + हाइबरनेट: ब्राउज़र से आंशिक मॉडल अपडेट
मान लीजिए कि हम एक उपयोगकर्ता वर्ग (, केवल इस उदाहरण में सार्वजनिक गुण ज़ाहिर है) करते हैं:
public class User {
public String firstName;
public String lastName;
public String email;
public Date subscriptionExpiration;
}
अब मैं एक JSP में इनपुट फ़ील्ड के रूप में पहले तीन गुण प्रदर्शित करने और में वस्तु को अपडेट करना चाहते तदनुसार डेटाबेस। केवल इन 3 पैरामीटर को अद्यतन किया जाना चाहिए, चौथा नहीं। इसे पूरा करने का एक तरीका
@RequestMapping("/user/{userId}", method=RequestMethod.POST)
public String saveChanges(@PathVariable userId, User user, Model model) {
User oldUser = User.loadFromDB(userId);
oldUser.firstName = user.firstName;
oldUser.lastName = user.lastName;
oldUser.email = user.email;
oldUser.saveToDB();
model.addAttribute("user", oldUser);
}
लेकिन इसका मतलब यह होगा कि सभी गुणों को हार्डकोड करना जो बदल सकता है, जो मुझे बहुत पसंद नहीं है।
क्या यह निर्धारित करने का कोई तरीका है कि उपयोगकर्ता को बदलने की अनुमति देने के आधार पर कौन से फ़ील्ड अपडेट करना है? यह तंत्र केवल यह मानने से बेहतर होना चाहिए कि अनुरोध पैरामीटर में जो कुछ भी है, बदला जा सकता है, अन्यथा कोई भी समझदार उपयोगकर्ता अनुरोध में अतिरिक्त फ़ील्ड मैन्युअल रूप से इंजेक्ट कर सकता है।
@Entity (dynamicUpdate = true) का उपयोग करके मेरी आंखों में समस्या का समाधान नहीं होता है, क्योंकि मुझे अनुरोध में पूरी उपयोगकर्ता वस्तु वापस नहीं मिल रही है, और ऐसा करने से कई सुरक्षा छेद खुल जाएंगे।
क्या मुझे वसंत में एक अच्छी सुविधा याद आ रही है या क्या इस समस्या के लिए संकल्पनात्मक रूप से हल करने का कोई अन्य तरीका है? किसी भी संकेत की बहुत सराहना की जाती है!
इस समय मैंने ऐसा कुछ किया है; मैं फ़ील्ड पर कस्टम एनोटेशन का उपयोग कर रहा हूं ताकि यह अपडेट किया जा सके कि उन्हें अपडेट किया जाएगा या फिर उन्हें अनदेखाप्रॉपर्टीज की सूची के साथ आने के लिए पार्स किया जा रहा है। यह अच्छी तरह से काम करता है, लेकिन मैं इसे मैन्युअल रूप से परिभाषित करने से बचना चाहता हूं। वैसे, इनपुट के लिए धन्यवाद! – usimon