मैं वसंत और हाइबरनेट का उपयोग कर एक वेब अनुप्रयोग बना रहा हूं। मैं सर्वर साइड टेबल बनाना चाहता था जिसके लिए मुझे सेवा कक्षा में लिखी गई एक विधि की आवश्यकता है। लेकिन इसे सफलतापूर्वक निष्पादित करने के लिए मुझे इसे अपेक्षित वर्ग में स्वत: करने की आवश्यकता है क्योंकि अब यह तालिका तक पहुंचने वाला एक नल पॉइंटर अपवाद दे रहा है।क्या हम jsp में @autowired का उपयोग कर सकते हैं। यदि हां तो कैसे?
उत्तर
यदि आप स्प्रिंग एमवीसी का उपयोग कर रहे हैं तो आप मॉडल और व्यू के लिए जेएसपी धन्यवाद के लिए अपनी सेवा पास कर सकते हैं।
मान लीजिए आप है: नियंत्रक
@Controller
public void MyController {
@Autowired
private MyServiceInterface myService;
@RequestMapping(value="myUrl")
public ModelAndView displayPage() {
//do some stuff
return new ModelAndView("myView").addObject("myService", myService);
}
}
JSP:
<html>
.
${myService.myMethodIWantToUse}
.
</html>
लेकिन जैसे Slava Semushin ने कहा, यह एक बुरा व्यवहार है। यदि आप अपनी विधि से परिणामों को छोड़ रहे हैं और उन्हें अपने जेएसपी में प्रिंट कर रहे हैं, तो उन्हें अपने मॉडल (मॉडल एंड व्यू) में रखें
अनुरोध में बीन पास करना/mav.addObject आदर्श तरीका नहीं है ... किसी को हमेशा मदद के लिए आवेदनकॉन्टेक्स्ट –
से बीन प्राप्त करना चाहिए .... – HVT7
नहीं। आप जेएसपी में बीन्स को ऑटोवायर नहीं कर सकते हैं। बीन्स कक्षाओं में स्वायत्त हैं जो खुद को एनोटेट कर रहे हैं। @Component
या @Component
के बच्चे के साथ एनोटेटेड कोई भी वर्ग अन्य बीन्स को एनोटेट कर सकता है।
नहीं, आप जेएसपी में @autowired
का उपयोग नहीं कर सकते हैं।
उदाहरण बीन:
@Component("abcBean")
public Abc{
public void sysout(){
System.out.printn("Hello world");
}
}
JSP में:
आप इस का उपयोग कर सकते हैं -:
ApplicationContext ac = RequestContextUtils.getWebApplicationContext(request);
ac.getBean("yourBeanName");
को संपादित: आप JSP में एक सेम की जरूरत है, तो आप निम्न का उपयोग कर सकते वसंत प्रबंधित सिंगलटन बीन के रूप में:
ApplicationContext ac = RequestContextUtils.getWebApplicationContext(request);
Abc abc = (Abc) ac.getBean("abcBean");
abc.sysout();
अगर कुछ और आवश्यक है तो कृपया पोस्ट करें।
यह एमवीसी एप्लिकेशन में करने का आदर्श तरीका नहीं है, तो आपको नियंत्रक को HTTP कॉल करना चाहिए आपको सेवा से कुछ लाने की जरूरत है।
बीएसएस को जेएसपी में स्वचालित नहीं किया जा सकता है। वसंत कंटेनर में परिभाषित बीन्स लाने के लिए आपको RequestContextUtils
कक्षा का उपयोग करना होगा।
यदि आप टोमकैट का उपयोग कर रहे हैं, हाँ, लेकिन इसमें कुछ काम लगता है।
समाधान सामान्य टोमकैट इंस्टेंस मैनेजर (जो जेएसपी इंस्टेंस को चालू करने के लिए उपयोग करता है) को लपेटना है और फिर श्रोता के माध्यम से लिपटे संस्करण को इंजेक्ट करना है।
सबसे पहले, रैपिंग प्रबंधक वर्ग। यह बहुत आसान है और उन्हें वापस करने से पहले नव निर्मित वस्तुओं में सेम इंजेक्ट करता है।
public class SpringInstanceManager implements InstanceManager {
ServletContext ctx;
InstanceManager manager;
public SpringInstanceManager(ServletContext ctx, InstanceManager manager){
this.ctx = ctx;
this.manager = manager;
}
public Object processAnnotations(Object o) throws IllegalAccessException, InvocationTargetException, NamingException {
if (o != null && o.getClass().getName().endsWith("_jsp")){
SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(o, ctx);
}
return o;
}
@Override
public Object newInstance(Class<?> clazz) throws IllegalAccessException, InvocationTargetException, NamingException, InstantiationException {
return processAnnotations(manager.newInstance(clazz));
}
@Override
public Object newInstance(String className) throws IllegalAccessException, InvocationTargetException, NamingException, InstantiationException, ClassNotFoundException {
return processAnnotations(manager.newInstance(className));
}
@Override
public Object newInstance(String fqcn, ClassLoader classLoader) throws IllegalAccessException, InvocationTargetException, NamingException, InstantiationException, ClassNotFoundException {
return processAnnotations(manager.newInstance(fqcn, classLoader));
}
@Override
public void newInstance(Object o) throws IllegalAccessException, InvocationTargetException, NamingException {
manager.newInstance(o);
}
@Override
public void destroyInstance(Object o) throws IllegalAccessException, InvocationTargetException {
manager.destroyInstance(o);
}
}
और फिर हम संदर्भ स्टार्टअप पर इसकी सुई एक श्रोता जोड़ें:
public class SpringJSPEnablerListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
ServletContext context = sce.getServletContext();
InstanceManager oldManager = ((InstanceManager) (context.getAttribute(InstanceManager.class.getName())));
if (!(oldManager instanceof SpringInstanceManager)) {
InstanceManager springInjectingInstanceManager = new SpringInstanceManager(context,oldManager);
context.setAttribute(InstanceManager.class.getName(), springInjectingInstanceManager);
}
}
@Override
public void contextDestroyed(ServletContextEvent sce) {}
}
तो JSP पृष्ठों आप इस
<%! @Autowired MyClass myClassInstance %>
की तरह कुछ का उपयोग कर सकते में
और इसे सही ढंग से काम करना चाहिए ।
- 1. क्या हम डेटासेट को वेब सेवा विधि में पास कर सकते हैं? यदि हां, तो कैसे?
- 2. क्या आप PHP में आरईएसटी का उपयोग कर सकते हैं? यदि हां, तो कैसे?
- 3. क्या आप canvas.getContext ('3d') का उपयोग कर सकते हैं? यदि हां, तो कैसे?
- 4. क्या हम जावा में एक शून्य ऑब्जेक्ट के साथ एक स्थिर विधि कॉल कर सकते हैं? यदि हां, तो कैसे?
- 5. क्या आप Backbone.js संग्रह पर विशेषताओं को सेट कर सकते हैं? यदि हां, तो कैसे?
- 6. क्या हम संघ में सूचक का उपयोग कर सकते हैं?
- 7. क्या आप बिज़टॉक का उपयोग कर रहे हैं? यदि हां, तो आप इसका उपयोग कैसे कर रहे हैं?
- 8. क्या आप गिट में एक समग्र परिवर्तन देख सकते हैं? यदि हां, तो कैसे?
- 9. क्या हम हाइबरनेट में संघ का उपयोग कर सकते हैं?
- 10. यदि हम आईओएस 5 में शामिल नहीं हैं तो क्या हम आईओएस 6 में एक फ़ॉन्ट का उपयोग कर सकते हैं?
- 11. क्या हम प्रतिक्रियाशील देशी में नेविगेटर का उपयोग कर एक ही मार्ग प्रस्तुत कर सकते हैं?
- 12. योजना और रैकेट अलग हैं? यदि हां, तो कैसे?
- 13. हम nstimer के बजाय क्या उपयोग कर सकते हैं?
- 14. क्या हम एसडीएल ट्रिडियन में माइग्रेट कर सकते हैं?
- 15. क्या @Autowired और डिफ़ॉल्ट-autowire coexist कर सकते हैं?
- 16. क्या हम यूआरएल में उपयोग कर सकते हैं?
- 17. यदि आप अनावश्यक हैं तो क्या आप निजी एक्सेस संशोधक का उपयोग कर सकते हैं?
- 18. हम ओपनकार्ट घटनाओं का उपयोग कैसे कर सकते हैं?
- 19. क्या हम एएसपीनेट में ग्लोबल.एक्सएक्स का परीक्षण कर सकते हैं?
- 20. क्या हम एक आवेदन में दो Google क्लाउड मैसेजिंग SENDER_ID का उपयोग कर सकते हैं?
- 21. क्या हम sandcastle तेज कर सकते हैं?
- 22. क्या हम दो अलग डेटाबेस टेबल के लिए शामिल होने का उपयोग कर सकते हैं?
- 23. प्रतिबिंब। हम इसका उपयोग करके क्या हासिल कर सकते हैं?
- 24. क्या आप कस्टम टेम्पलेट टैग कर सकते हैं जो एक क्वेरीसेट देता है? यदि हां, तो कैसे? - Django
- 25. क्या Xlsxwriter का उपयोग कर पायथन में एक्सेल शीट से डेटा पढ़ना संभव है? यदि हां, तो कैसे?
- 26. पायथन में, क्या आपके पास ट्रिपल कोट्स के भीतर चर हो सकते हैं? यदि हां, तो कैसे?
- 27. क्या कक्षा में दो सार्वजनिक अनुभाग हो सकते हैं? यदि हां तो क्यों? और किस परिस्थितियों में हम ऐसा करते हैं?
- 28. क्या हम कीवर्ड Documentdb की तरह उपयोग कर सकते हैं?
- 29. क्या जावा ऐप सर्वर धागे को नष्ट करने में सक्षम हैं? यदि हां, तो कैसे?
- 30. क्या हम लैम्ब्डा तर्क का प्रकार प्राप्त कर सकते हैं?
अपना कोड भी पोस्ट करें –
जहां आप अपने प्रश्न में जेएसपी या स्प्रिंग एमवीसी के बारे में पूछते हैं? कृपया अधिक जानकारी प्रदान करें। –
भले ही आप ऐसा करेंगे कि यह अभी भी एक बुरा अभ्यास है। उचित तरीके से नियंत्रकों में सभी काम करना और मॉडल के माध्यम से देखने के लिए परिणाम पास करना है। मदद के लिए –