दिलचस्प पोस्ट
इकाई फ़्रेमवर्क रिफ़्रेश प्रसंग? लगातार जावा एफएफ़ कार्यकर्ता थ्रेड में UI अपडेट करें JSON वर्ण एन्कोडिंग अपवाद प्राप्त करना: 'स्प्रिंग सिक्योरिटी फ़िल्टरैन' नाम का कोई बीन परिभाषित नहीं किया गया है आप एक बड़े एमएस एसक्यूएल। एसक्यूएल फ़ाइल कैसे आयात करते हैं? ट्विटर छवि एन्कोडिंग चुनौती ब्राउज़र में कम से कम कैसे अक्षम करें बटन को अधिकतम करें? psql: FATAL: भूमिका "पोस्टग्रेज़" मौजूद नहीं है क्रोम ब्राउज़र पर एनपीएपीआई छोड़ने के बाद जेज़बरा / क्यूज़ जावा कच्चे प्रिंट प्लगइन के वैकल्पिक विकल्प <a> जो किसी href को कुछ स्ट्रिंग से समाप्त होता है का चयन करें स्क्रॉल डाउन पर फ़ेड इन करें, फलक आउट ऑन स्क्रॉल अप – विंडो में तत्व की स्थिति के आधार पर क्रोम: अनक्यूट सिंटेक्स त्रुटि: इनपुट का अनपेक्षित अंत मल्टी सेगमेंट क्यूबिक बेजियर वक्र और एक दूरी के साथ-साथ वक्रता संधि के साथ डेटा का अनुमान आईओएस 7 में ठीक से काम नहीं कर रहा है UICollectionView पुनः लोडडेटा कितने पंक्तियों का चयन करने के लिए <h: selectBooleanCheckbox> में <h: dataTable> का उपयोग करें?

स्ट्रॉशस में निर्भरता इंजेक्शन प्रवेश सत्र स्कॉड बीन्स

हाल ही में मुझे स्ट्रट्स 2 में डि उपयोग करने की आवश्यकता थी। मुझे पता है कि यह इसका उपयोग अपने DI कार्यान्वयन का उपयोग करता है, लेकिन Guice नहीं, जहां तक ​​मुझे इंजेक्शन सेम के दायरे को निर्धारित करने के लिए उपयुक्त कुछ एनोटेशन नहीं मिल सके। कम होने के लिए, मैंने एक बीन बनाया है

//@Repository //@Scope("session") public class Session { private Map<String, Object> map = new HashMap<>(); public Map<String, Object> getMap() { return map; } public void setMap(Map<String, Object> map) { this.map = map; } } 

मैंने स्प्रिंग सेम के साथ इस्तेमाल की गई टिप्पणियों पर टिप्पणी की है मैं वसंत डी के माध्यम से सफलतापूर्वक एक ही बीन का निर्माण किया था और मेरे ऑब्जेक्ट इंजेक्शन के दायरे को सेट किया था। अब, मैं स्ट्रट्स 2 और डि के साथ ऐसा ही करना चाहता हूं। इस प्रयोजन के लिए मैंने struts.xml में बीन की परिभाषा बनाई

 <bean name="session" class="jspbean.struts.Session" scope="session"/> 

और उस क्रिया को बनाने के लिए सरल कार्यवाही और मेरी कार्रवाई में इंजेक्शन

 public class DefaultAction extends ActionSupport { private Session session; // @Autowired @Inject("session") public void setSession(Session session) { this.session = session; } public Session getSession() { return session; } private Map<String, String> myMap = new HashMap<String, String>(); public Map<String, String> getMyMap() { return myMap; } public void setMyMap(Map<String, String> myMap) { this.myMap = myMap; } @Override public String execute() throws Exception { //populate my bean with sample data myMap.put("q1", "Question1"); myMap.put("q2", "Question2"); session.getMap().put("myMap", myMap); return SUCCESS; } } 

जेएसपी में मैं सत्र बीन पर साधारण इटरेटर का उपयोग करता हूं

 <s:iterator value="session.map['myMap']"> <s:textfield name="myMap['%{key}']" value="%{value}" theme="simple" size="10" /><br> </s:iterator> 

अब, जब मैं इस गड़बड़ी आवेदन को चला रहा हूं, मुझे अपवाद मिला है

 Stacktraces Unable to instantiate Action, jspbean.struts.DefaultAction, defined for '' in namespace '/'java.lang.IllegalStateException: Scope strategy not set. Please call Container.setScopeStrategy(). com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:316) com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:397) com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:194) org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63) org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39) com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58) org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:536) org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) java.lang.Thread.run(Unknown Source) java.lang.RuntimeException: java.lang.IllegalStateException: Scope strategy not set. Please call Container.setScopeStrategy(). com.opensymphony.xwork2.inject.ContainerImpl$MethodInjector.inject(ContainerImpl.java:301) com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java:492) com.opensymphony.xwork2.inject.ContainerImpl$6.call(ContainerImpl.java:530) com.opensymphony.xwork2.inject.ContainerImpl$6.call(ContainerImpl.java:528) com.opensymphony.xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:584) com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java:528) com.opensymphony.xwork2.ObjectFactory.injectInternalBeans(ObjectFactory.java:139) com.opensymphony.xwork2.spring.SpringObjectFactory.autoWireBean(SpringObjectFactory.java:208) com.opensymphony.xwork2.spring.SpringObjectFactory.buildBean(SpringObjectFactory.java:183) com.opensymphony.xwork2.spring.SpringObjectFactory.buildBean(SpringObjectFactory.java:154) com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:151) com.opensymphony.xwork2.ObjectFactory.buildAction(ObjectFactory.java:121) com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:297) com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:397) com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:194) org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63) org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39) com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58) org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:536) org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) java.lang.Thread.run(Unknown Source) java.lang.IllegalStateException: Scope strategy not set. Please call Container.setScopeStrategy(). com.opensymphony.xwork2.inject.InternalContext.getScopeStrategy(InternalContext.java:53) com.opensymphony.xwork2.inject.Scope$5$1.create(Scope.java:130) com.opensymphony.xwork2.inject.ContainerImpl$ParameterInjector.inject(ContainerImpl.java:469) com.opensymphony.xwork2.inject.ContainerImpl.getParameters(ContainerImpl.java:484) com.opensymphony.xwork2.inject.ContainerImpl.access$000(ContainerImpl.java:34) com.opensymphony.xwork2.inject.ContainerImpl$MethodInjector.inject(ContainerImpl.java:299) com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java:492) com.opensymphony.xwork2.inject.ContainerImpl$6.call(ContainerImpl.java:530) com.opensymphony.xwork2.inject.ContainerImpl$6.call(ContainerImpl.java:528) com.opensymphony.xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:584) com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java:528) com.opensymphony.xwork2.ObjectFactory.injectInternalBeans(ObjectFactory.java:139) com.opensymphony.xwork2.spring.SpringObjectFactory.autoWireBean(SpringObjectFactory.java:208) com.opensymphony.xwork2.spring.SpringObjectFactory.buildBean(SpringObjectFactory.java:183) com.opensymphony.xwork2.spring.SpringObjectFactory.buildBean(SpringObjectFactory.java:154) com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:151) com.opensymphony.xwork2.ObjectFactory.buildAction(ObjectFactory.java:121) com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:297) com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:397) com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:194) org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63) org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39) com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58) org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:536) org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) java.lang.Thread.run(Unknown Source) 

अपवाद का कहना है कि मुझे स्कोप रणनीति को सेट करने की आवश्यकता है तो, मेरा सवाल यह है कि यह स्कोप रणनीति क्या है और यह कैसे मेरे सरल आवेदन में लागू किया जा सकता है। इसके अलावा, @Scoped टिप्पणी @Scoped , मेरे विवरण में यह एनोटेशन कैसे लागू होगा?

मेरा उदाहरण संदर्भ:

  1. बीन कॉन्फ़िगरेशन

वेब के समाधान से एकत्रित समाधान "स्ट्रॉशस में निर्भरता इंजेक्शन प्रवेश सत्र स्कॉड बीन्स"

चलिए देखते हैं कि एक Scope.Strategy क्या है। डॉक्स पर Scope.Strategy करके Scope.Strategy । इसे कहते हैं

प्लगेबल स्क्रॉपिंग रणनीति उपयोगकर्ताओं को अनुरोध, सत्र, और विज़ार्ड स्कोप के कस्टम कार्यान्वयन प्रदान करने में सक्षम बनाता है Container.setScopeStrategy(com.opensymphony.xwork2.inject.Scope.Strategy) को लागू करें और पास करें

ठीक है, मान लें कि मैं सत्र क्षेत्र को लागू करना चाहता हूं। तब मुझे उस स्थान को जानना होगा जहां मैं इसे लागू कर सकता था। ढांचा का विस्तार बिंदु है जहां आप अपने एक्सटेंशन को प्लग कर सकते हैं या बस default कार्यान्वयन का विस्तार कर default हैं और अपने स्वयं के कस्टम लागूकरण प्रदान कर सकते हैं। यह BeanSelectionProvider को BeanSelectionProvider आसान होता है फिर स्टैकेट्स का विश्लेषण करते हुए मैंने तय किया कि सबसे अच्छा मुद्दा DefaultActionProxyFactory का विस्तार होगा। इसे विस्तारित करने के लिए DefaultActionProxy भी विस्तारित करना आवश्यक है।

 public class MyActionProxyFactory extends DefaultActionProxyFactory { public MyActionProxyFactory() { super(); } @Override public ActionProxy createActionProxy(ActionInvocation inv, String namespace, String actionName, String methodName, boolean executeResult, boolean cleanupContext) { MyActionProxy proxy = new MyActionProxy(inv, namespace, actionName, methodName, executeResult, cleanupContext); container.inject(proxy); container.setScopeStrategy(new MyScopeStrategy()); proxy.prepare(); return proxy; } } public class MyActionProxy extends DefaultActionProxy { protected MyActionProxy(ActionInvocation inv, String namespace, String actionName, String methodName, boolean executeResult, boolean cleanupContext) { super(inv, namespace, actionName, methodName, executeResult, cleanupContext); } @Override protected void prepare() { super.prepare(); } } public class MyScopeStrategy implements Scope.Strategy { @Override public <T> T findInRequest(Class<T> type, String name, Callable<? extends T> factory) throws Exception { return null; } @Override public <T> T findInSession(Class<T> type, String name, Callable<? extends T> factory) throws Exception { ActionContext context = ActionContext.getContext(); SessionMap<String, T> sessionMap = (SessionMap<String, T>) context.getSession(); if (sessionMap == null) { sessionMap = new SessionMap<String, T>(ServletActionContext.getRequest()); context.setSession((Map<String, Object>) sessionMap); } T obj = sessionMap.get(name); if (obj == null) { obj = factory.call(); sessionMap.put(name, obj); } return obj; } @Override public <T> T findInWizard(Class<T> type, String name, Callable<? extends T> factory) throws Exception { return null; } } 

विन्यास फाइल struts.xml आपको संपत्ति सेट करनी चाहिए

 <constant name="struts.actionProxyFactory" value="jspbean.struts.factory.MyActionProxyFactory"/> 

Session साथ बीन Session को इंजेक्षन करने की आवश्यकता है। इसी प्रकार के क्रियान्वयन अन्य स्कोप के लिए किया जा सकता है नोटिस, कि सिंगलटन (डिफ़ॉल्ट रूप से उपयोग किया जाता है), थ्रेड, और डिफ़ॉल्ट जैसे अन्य स्कोपों ​​में ऐसा प्लगेबल एक्सटेंशन की आवश्यकता नहीं होती है और आखिरी शब्द @Scoped एनोटेशन के बारे में है। यह प्रयोग नहीं किया जाता है यदि आप बीन्स को एक्सएमएल कॉन्फ़िगरेशन के जरिए प्रदान करते हैं लेकिन यदि आप ContainerBuilder को बीन के साथ किसी अन्य तरीके से आपूर्ति करते हैं तो यह उस पर एनोटेशन ढूंढने और संबंधित गुंजाइश सेट करने में सक्षम है।

मेरा मानना ​​है कि लुइगी की टिप्पणी सही है। "@ इंजेक्ट" फ़ील्ड वैल्यू पर ही होना चाहिए, सेटर पर नहीं।

  @Inject("session") private Session session; 

जब तक आपको स्ट्रट्स.एक्सएमएल में "सत्र" बीन को परिभाषित किया गया है या स्ट्रट्स कंटेनर के साथ पंजीकृत किया गया है, तब तक इसे खोजने और इसे इंजेक्ट करने में सक्षम होना चाहिए। आपके स्पष्टीकरण से ऐसा मामला लगता है

कुछ अधिक विशिष्ट जानकारी के लिए स्ट्रट्स उपयोगकर्ता सूची पर इस चर्चा की जांच करें: बिल्ट-इन डि पर स्ट्रट उपयोगकर्ता का सवाल