मैं जो अन्य बातों के अलावा Converter
रों है कि एक ही पैटर्न का पालन की एक संख्या है वसंत और हाइबरनेट साथ JSF परियोजना पर काम कर रहा हूँ:जावा जेनेरिक्स के साथ संस्थाओं के लिए कन्वर्टर्स लागू
getAsObject
की स्ट्रिंग प्रतिनिधित्व प्राप्त करता है वस्तु आईडी, यह एक संख्या में बदलता है, और दिए गए प्रकार की इकाई और दी गई idgetAsString
प्राप्त करता है और इकाई को लाने और वस्तुString
करने के लिए परिवर्तित की आईडी रिटर्न
कोड अनिवार्य रूप से क्या इस प्रकार (चेक छोड़े गए) है:
@ManagedBean(name="myConverter")
@SessionScoped
public class MyConverter implements Converter {
private MyService myService;
/* ... */
@Override
public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String value) {
int id = Integer.parseInt(value);
return myService.getById(id);
}
@Override
public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object value) {
return ((MyEntity)value).getId().toString();
}
}
को देखते हुए Converter
कि (MyService
और निश्चित रूप से MyEntity
के प्रकार के लिए छोड़कर) वास्तव में इस तरह कर रहे हैं की एक बड़ी संख्या है, मैं था यह सोचकर कि क्या यह एक सामान्य जेनरेटर कनवर्टर का उपयोग करने लायक था। जेनेरिक का खुद का कार्यान्वयन मुश्किल नहीं है, लेकिन मुझे बीन्स घोषित करने के सही दृष्टिकोण के बारे में निश्चित नहीं है। - सामान्य कार्यान्वयन लिखें, चलो यह MyGenericConverter
कॉल, किसी भी बीन एनोटेशन
2 बिना - विशिष्ट कनवर्टर विज्ञापन MyGenericConverter<T>
का एक उपवर्ग लिखें और के रूप में उस पर टिप्पणी
1:
सम्भावित समाधान निम्नलिखित है की जरूरत:
@ManagedBean(name="myFooConverter")
@SessionScoped
public class MyFooConverter implements MyGenericConverter<Foo> {
/* ... */
}
इस लेखन जबकि मुझे एहसास हुआ कि शायद एक जेनेरिक वास्तव में जरूरत नहीं है, तो शायद मैं बस एक आधार वर्ग दो विधियों के कार्यान्वयन के साथ लिख सकता है, एक जरूरत के रूप में डी subclass।
वहां कुछ गैर-मामूली विवरण हैं जिनकी देखभाल की जानी है (जैसे तथ्य यह है कि मुझे MyService
कक्षा को किसी तरह से सार करना होगा) तो मेरा पहला सवाल यह है: क्या यह परेशानी का लायक है?
और यदि हां, तो क्या अन्य दृष्टिकोण हैं?
साथ बराबर और हैशकोड विधियों में अनुशंसित नहीं है: वे व्यापार कुंजी समानता का उपयोग कर बराबर() और हैशकोड() को कार्यान्वित करने की अनुशंसा करते हैं: https://docs.jboss.org/hibernate/stable/core.old/reference/en/html/persistent-classes -equalshashcode.html और समग्र आईडी के बारे में कैसे? –