दिलचस्प पोस्ट
PHP और fgetcsv फ़ंक्शन का उपयोग करते हुए सीएसवी फ़ाइल से एक सरणी कैसे बनाएं पॉपअप में इनपुट त्रुटियाँ कैसे प्रदर्शित करें? स्टोरीबोर्ड के साथ टैब बार नियंत्रक में चयनित छवि को सेट करना क्लाइंट साइड पर जावास्क्रिप्ट में JPEG EXIF ​​रोटेशन डेटा एक्सेस करना सी # में वर्तमान निष्पादन योग्य का नाम कैसे प्राप्त करूं? एसवीजी आईएमजी तत्व अनुपात में यानी 9 में सम्मानित नहीं है असाइनमेंट के बिना जावा टर्नरी ArrayList से यादृच्छिक वस्तु को पुनर्प्राप्त करना क्रॉकफोर्ड के ऑब्जेक्ट को समझना सी # एचटीटीपी क्लाइंट 4.5 मल्टीपार्ट / फॉर्म-डेटा अपलोड PHP: स्प्लिट स्ट्रिंग मेरे java.net.SocketException के कारण क्या है: कनेक्शन रीसेट? समान यादृच्छिक संख्या हर लूप चलना मैं जावास्क्रिप्ट कोड कैसे छुपा या एन्क्रिप्ट कर सकता हूं? टॉमकेट में क्रॉस कंटेंक्स विशेषता क्या करती है? क्या यह सत्र साझाकरण को सक्षम करता है?

क्या मुझे स्ट्रटस 2 दृश्य परत में डेटाबेस रिकॉर्ड प्राप्त करना चाहिए?

मेरे पास एक संपादन पृष्ठ है जिसमें मैं विषयों और स्तरों को डेटाबेस से प्राप्त करना चाहता हूं और पाठ्यक्रम को संपादित करने के लिए उपयोगकर्ता के लिए चयन विकल्प के रूप में प्रदर्शित करना चाहता हूं।

जब फॉर्म सबमिट किया जाता है, तो यह एक नया अनुरोध करेगा, उपयोगकर्ता इनपुट को एक्सएमएल सत्यापन के साथ बेशक लिया जाता है। जब XML प्रमाणीकरण असफल हो, तो यह कोर्स के साथ आगे बढ़ेगी, जिसने बस यूज़रीया इनपुट को edit.jsp पर कब्जा कर लिया है

यहां छवि विवरण दर्ज करें

इसलिए हर बार जब मैं edit.jsp पर जाता हूं , तो मैं डेटाबेस रिकॉर्ड को पुनः प्राप्त करूंगा। क्या मुझे ऐसा करना चाहिए?

इसके अलावा, मैंने विषय को जलाया और स्तर रोशन करने की कोशिश की और उन्हें एक्शन क्लास में अनुरोध विशेषता के रूप में संग्रहीत किया जो पहली बार edit.jsp दिखाता है। लेकिन जब नया अनुरोध उपयोगकर्ता इनपुट से किया जाता है, तो डेटाबेस से प्राप्त विषय सूची और स्तर सूची अब उपलब्ध नहीं होगी।

कोड (edit.jsp):

<% Session session2 = HibernateUtil.getSessionFactory().getCurrentSession(); Transaction tx = session2.beginTransaction(); Query q = session2.createQuery("from Subject"); List subjectList = q.list(); List levelList = session2.createQuery("from Level").list(); %> <div class="control-group"> <label class="control-label" for="inputPassword">Subject</label> <div class="controls"> <select name="subject_id"> <% for (Object subjectObject : subjectList) { Subject subject = (Subject) subjectObject; %> <option value="<%=subject.getId()%>"><%=subject.getName()%></option> <% } //end for %> </select> </div> </div> <div class="control-group"> <label class="control-label" for="inputPassword">Level</label> <div class="controls"> <select name="level_id"> <% for (Object levelObject : levelList) { Level level = (Level) levelObject; %> <option value="<%=level.getId()%>"><%=level.getName()%></option> <% } //end for %> </select> </div> </div> 

Solutions Collecting From Web of "क्या मुझे स्ट्रटस 2 दृश्य परत में डेटाबेस रिकॉर्ड प्राप्त करना चाहिए?"

Scriptlet का उपयोग Scriptlet ( <% stuff %> ) का प्रयोग करने की आवश्यकता नहीं होगी। वे बूढ़े, बुरे हैं, वे दृश्य पृष्ठों में इंजेक्ट किए गए व्यवसाय तर्क हैं, उनका उपयोग न करें। आपको JSTL की आवश्यकता नहीं है, बस स्ट्रट्स 2 टैग का उपयोग करके आप किसी भी परिणाम प्राप्त कर सकते हैं।

कोड और अवधारणाओं के एक बेहतर decoupling और पृथक्करण के लिए, आपके पास होना चाहिए:

  1. DAO Layer : यह सिर्फ सादे प्रश्न करता है;
  2. BUSINESS Layer : यह Service (एस) के माध्यम से डीएओ परत परिणामों को उजागर करता है, एकाधिक डीएओ कॉल एकत्र करता है और आवश्यक होने पर कई व्यवसाय संचालन करता है;
  3. PRESENTATION Layer : कार्य, जो कि स्ट्रॉप्स 2 में मॉडल के रूप में कार्य करता है; यहां आप जेएसपी द्वारा आवश्यक वस्तुओं को पुनः प्राप्त करने के लिए बिजनेस लेयर से सेवा कॉल करते हैं;
  4. JSP (VIEW Layer) : जेएसपी में सादे एचटीएमएल शामिल है, और एक्शन के #session (गेटर्स) के माध्यम से आवश्यक डेटा तक #session , और अंततः वैल्यू स्टैक ( #session , #session , आदि) से किसी अन्य आवश्यक तत्व का उपयोग करता है।

    आपके उदाहरण में, यह सब

 <% Session session2 = HibernateUtil.getSessionFactory().getCurrentSession(); Transaction tx = session2.beginTransaction(); Query q = session2.createQuery("from Subject"); List subjectList = q.list(); List levelList = session2.createQuery("from Level").list(); %> 

डीएओ / बिजनेस लेयर में होना चाहिए, दो समारोहों से अवगत होना चाहिए जैसे getSubjectList(); और getLevelList(); । फिर आपकी कार्रवाई में आपको कुछ ऐसा होना चाहिए:

 public class YourAction { private List<Object> levelList; // private private List<Object> subjectList; // private public String execute() throws Exception { // Call the service, load data levelList = getMyService().getLevelList(); subjectList = getMyService().getSubjectList(); // Forwarding to the JSP return SUCCESS; } public List<Object> getLevelList() { return levelList; } public List<Object> getSubjectList() { return subjectList; } } 

और इसके बजाय अपने जेएसपी में:

 <select name="subject_id"> <% for (Object subjectObject : subjectList) { subject subject = (Subject) subjectObject; %> <option value="<%=subject.getId()%>"><%=subject.getName()%></option> <% } //end for %> </select> 

आप सूची (उदास मिश्रित HTML / Struts2 तरह) की तरह उपयोग करते हैं:

 <select name="subject_id"> <s:iterator value="subjectList"> <option value="<s:property value="id"/>"> <s:property value="name"/> </option> </s:iterator> </select> 

या, एक चयन के मामले में, उचित Struts2 UI का चयन टैग के साथ:

 <s:select name = "subject_id" list = "subjectList" listKey = "id" listValue = "name" /> 

शुरुआत में सभी परतों को अलग करना बहुत कठिन है, तो कार्रवाई में पहले तीन स्तरों को समतल कर दें, बस समझने के लिए कि जावा (एक्शन) और स्ट्रट्स 2 यूआई टैग्स (जेएसपी) कैसे अलग हो जाए। जब समझा जाए, तो आप डीएओ लॉजिक को व्यवसाय स्तर पर ले जा सकते हैं, अधिमानतः एक ईजेबी में। जब यह हासिल किया गया, तो अधिक ग्रैन्युलैरिटी के साथ दोबारा विभाजन …

यह कार्य कुछ ऐसा होगा:

 public class YourAction { private List<Object> levelList; // private private List<Object> subjectList; // private public String execute() throws Exception { Session session2 = HibernateUtil.getSessionFactory().getCurrentSession(); Transaction tx = session2.beginTransaction(); Query q = session2.createQuery("from Subject"); subjectList = q.list(); levelList = session2.createQuery("from Level").list(); // Forwarding to the JSP return SUCCESS; } public List<Object> getLevelList() { return levelList; } public List<Object> getSubjectList() { return subjectList; } } 

सूचियों के कई लोडिंग के बारे में आपके प्रश्न के बारे में, आप एक कैश (टाइमर के साथ अगर बेहतर) का उपयोग कर सकते हैं यदि सूची तय हो गई है (यह उदाहरण के लिए एक महीने में बदलती है), या हर बार उसे लोड करने में, कोई समस्या नहीं है उस। कृपया ध्यान दें कि यदि सत्यापन विफल हो जाता है, तो मान्यकरण इंटरसेप्टर, इनपास प्रकार के परिणाम में जेपी मैप के लिए अग्रेषित () विधि तक पहुंच के बिना अनुरोध करेगा, ताकि आपको कार्रवाई से तैयारी के लिए इंटरफ़ेस लागू करना चाहिए और लोडिंग सामान को prepare() विधि prepare() करनी चाहिए, हर बार PrepareInterceptor द्वारा निष्पादित करें

 public class YourAction implements Preparable { private List<Object> levelList; // private private List<Object> subjectList; // private public void prepare() throws Exception { // Call the service, load data, // every time even if validation fails levelList = getMyService().getLevelList(); subjectList = getMyService().getSubjectList(); } public String execute() throws Exception { // Forwarding to the JSP return SUCCESS; } public List<Object> getLevelList() { return levelList; } public List<Object> getSubjectList() { return subjectList; } } 

कदमों से आगे बढ़ो, ढांचा आसान और शक्तिशाली है, वेब में बहुत सारे उदाहरण हैं और स्टैक ओवरफ्लो कुछ महान समर्थन प्रदान करता है …

आपको कैश की आवश्यकता क्या है लेकिन अगर डेटाबेस रिकॉर्ड अक्सर बदले जाने के लिए बाध्य होते हैं तो यह अनुचित नहीं है।

यदि प्रश्न में प्रश्न छोटा है (मुझे लगता है कि यह है) डेटाबेस से पूछताछ एक बड़ी कार्यक्षमता समस्या नहीं होनी चाहिए।

एक अन्य नोट पर, आपके जेएसपी को देखकर मैं देख रहा हूं कि जेएसपी लेखकों का पदावनत और दुरुपयोग किया गया है।

चूंकि आपने टैग स्ट्रट 2 जोड़ लिया है, मैं मानूंगा कि यह एक स्ट्रट्स 2 वेब प्रोजेक्ट है आपके द्वारा किए गए कार्यों के लिए स्ट्रट्स ui टैग्स में निर्मित (दृढ़ता से) का उपयोग करें।

आपका दृष्टिकोण केवल एक शहर को बिजली बनाने के लिए डायनेमोज़ का एक गुच्छा का उपयोग करने के रूप में वर्णित किया जा सकता है जब आपके पास अपने निपटान पर परमाणु रिएक्टर होता है

मेरा सुझाव है कि आप यहां शुरू करें: http://struts.apache.org/2.x/docs/home.html

यह आपको रूपरेखा का उचित विचार देगा और इसकी पूर्ण क्षमता है

एक सलाह, अगर आप एमवीसी वास्तुकला के साथ रहना चाहते हैं, तो कभी भी व्यावसायिक तर्क दृश्य में नहीं है। एमवीसी वास्तुकला के अनुसार यूआई अभियंताओं जो व्यू के साथ काम करते हैं, उन्हें बिजनेस लॉजिक के बारे में बिल्कुल नहीं पता होना चाहिए।

अपने जेएसपी पृष्ठ में इंटरमीक्सिंग एचटीएमएल और जावा संहिता देखें और जटिलताएं पैदा करेगा और कोड बनाए रखेंगे।

स्ट्रट्स 2 में सीआरयूड संचालन को कैसे कार्यान्वित करें यह देखने के लिए इस ट्यूटोरियल का उपयोग करें