नमस्कार पाठक।
मैं जावा के लिए एक उपकरण के बारे में बात करना चाहता हूं जिसे मैंने हाल ही में ठोकर खाई थी और हैबर पर इसका एक भी उल्लेख नहीं मिला। इसे
Metawidget कहा जाता है और इसका उद्देश्य जावा में फॉर्म उत्पन्न करना है।
निजी तौर पर, मुझे यह पसंद आया कि वह इसे रियलटाइम में करती है। मैंने किसी तरह एक परियोजना के साथ काम किया जिसने संकलन के स्तर पर जावा बीन्स उत्पन्न किए और मैं कह सकता हूं कि मुझे यह बिल्कुल पसंद नहीं आया। सबसे पहले, आप उत्पन्न वर्गों को छू नहीं सकते उन्हें किसी भी समय पुनर्जीवित किया जा सकता है। स्रोत सामग्री अजीब लगती है क्योंकि शुद्ध जावा नहीं है। आईडीई भी इन "गैजेट्स" को नहीं पहचानता है। खैर, संकलन / पीढ़ी के दौरान अतिरिक्त समय होता है, या तो कॉफी पीने के लिए, या अपने दांतों को आक्रोश के साथ पीसने के लिए।
इस उपकरण की निम्नलिखित विशेषताएं समान रूप से महत्वपूर्ण हैं:
मेटाविजेट इतने सारे रूप उत्पन्न करता है। मेरा मतलब है कि यह SWING, JSF, JSP और अन्य सभी प्रकार के जावा व्यू टेक्नोलॉजीज (साइट पर एक पूरी सूची है) हो सकता है। सच है, यह सब कुछ उत्पन्न नहीं करता है जैसा कि मैं चाहूंगा, लेकिन बाद में उस पर और अधिक।
यह उपकरण किसी भी POJO ऑब्जेक्ट के साथ काम कर सकता है और ऑब्जेक्ट में कोई भी होने पर जेपीए / हाइबरनेट एनोटेशन का सही उपयोग कर सकता है। उदाहरण के लिए, यदि ड्रॉप-डाउन सूची बनाई गई है (HTML चयन) और JPA एनोटेशन @Column (nullable = true) है, तो सूची का पहला विकल्प अशक्त होगा, यदि अशक्त या गलत है, तो कोई खाली विकल्प नहीं होगा।
जेएसएफ रूपों को उत्पन्न करने के लिए यहां मेटाडेटेट का उपयोग करने का एक संक्षिप्त उदाहरण है।
सबसे पहले, हम अपने प्रबंधन का वर्णन करते हैं:
@ManagedBean
public class MetawidgetBB {
@EJB
private FlexibleDAO flexibleDAO;
public UIMetawidget getMetawidget() {
HtmlMetawidget metawidget = new HtmlMetawidget();
initMetawidget(metawidget);
return metawidget;
}
public void setMetawidget(UIMetawidget metawidget) {
initMetawidget(metawidget);
}
private void initMetawidget(UIMetawidget metawidget) {
metawidget.setValue(Musician.class);
}
}
"Metawidget.setValue (Musician.class)" लाइन में, बीन के रूप में किस वर्ग का उपयोग करना है, यह इंगित करें।
फिर JSF टेम्पलेट:
....
xmlns:m="http://metawidget.org/faces"
....
<h:form>
<m:metawidget binding="#{metawidgetBB.metawidget}"/>
<h:form>
....
मैं बीन नहीं दूंगा, लेकिन सामान्य तौर पर यह सार्वजनिक संपत्तियों के साथ या गेटर्स / सेटर के साथ कोई भी वर्ग हो सकता है। मेरे मामले में, अभी भी एक कईToMany संबंध था।
So. सब कुछ तैयार है। संकलन करें, चलाएं।
देखा!
बस कुछ क्रम में काफी नहीं है।
जहाँ ManyToMany लिंक कोई संपादन योग्य फ़ील्ड नहीं हैं। बस पाठ।
यह वह है जो इसे अपसेट करता है। बेशक, मैं समझता हूं कि इस मामले में टूल को टेक्स्ट फ़ील्ड डालने का अधिकार नहीं है, लेकिन यह विकल्प भी नहीं दे सकता है। पता नहीं वे क्या हैं।
डेवलपर्स ने इस समस्या का अजीब समाधान पाया है। ये विशेष यूआई * लुकअप एनोटेशन हैं। उदाहरण के लिए, आप तत्वों को इस प्रकार सूचीबद्ध कर सकते हैं:
@UiLookup( { "Riga", "Moscow", "Kukuyevo" } )
public String getCity()
लेकिन सामान्य तौर पर, यह समस्या को हल नहीं करता है क्योंकि सभी मूल्य हार्डकॉकेट हैं। JSF के लिए, एक अभिव्यक्ति एनोटेशन है और यह कुछ इस तरह दिखता है:
@UiFacesLookup("#{myManagedBean.cities}")
Metawidget, यदि आवश्यक हो, तो शहरों की एक सूची के साथ एक इनपुट तत्व आकर्षित करें, ManagedBean "myManagedBean" तक पहुंच जाएगा, विधि "getCities ()", और वहां से प्राप्त सूची को स्थानापन्न करेगा। और ManagedBean में हम वह सब कुछ पर्ची करते हैं जो हम चाहते हैं। इसी तरह के समाधान न केवल जेएफएस के लिए उपलब्ध हैं।
अंत में, मैं अपने व्यक्तिगत प्रभाव को लिखना चाहता हूं।
सामान्य तौर पर, वह रिश्तों को छोड़कर, अपने लक्ष्य और प्रतिमान से पूरी तरह मेल खाता है। इसके अलावा, मैंने हाल ही में पायथन / Django की कोशिश की और मुझे वास्तव में ORM सेम से एक व्यवस्थापक बनाने का अवसर पसंद आया। और इसलिए मैं इसे जावा में देखना चाहूंगा ... निश्चित रूप से, मैं समझता हूं कि यदि साइट पर्याप्त गंभीर है, तो इतनी बारीकियां हो सकती हैं कि स्वचालन का उपयोग न करना बेहतर होगा, लेकिन अब जैसा भी है सब कुछ करना, लेकिन परियोजना की शुरुआत में यह जावा को बहुत मदद करेगा। डेवलपर को।
अपने सपने को वास्तविकता के करीब लाने के लिए, मैं जेपीए डेटा और मेटाविजेट्स के बीच अपनी खुद की लाइब्रेरी-लेयर बनाना चाहूंगा। ताकि सब कुछ अपने आप खिंच जाए और बना रहे। आज मैंने अपना एनोटेशन और इसकी प्रोसेसिंग की, ताकि अब मेरे पास जेपीए के माध्यम से खुद से जुड़े तत्व हों।
मैं यह नहीं कह सकता कि मैं एक महान विशेषज्ञ हूं, लेकिन मेटाविजेट कोड मुझे काफी अच्छा लगा और इसमें इसे खोजना आसान था।