2012-09-26 18 views
9

तोड़ने के कारण होता है हम कुछ समय के लिए स्ट्रैट्स 2.1.8 पर चल रहे हैं और सभी स्ट्रूट क्रियाएं अपेक्षित रूप से काम कर रही हैं, यानी स्ट्रेट्स कार्यों के लिए href को क्रिया नाम के साथ प्रस्तुत किया जाता है बिना विस्तार के। (Struts2। प्रतिक्रिया विस्तार सीएसएस, जावास्क्रिप्ट और स्ट्रेट्स डोजो को

<ul id="top_menu"> 
    <li id="itemHome" class="active"><s:a action="viewHome">Home</s:a></li> 
    <li><s:a action="viewSearch">Search</s:a></li> 
    <li><s:a action="viewBookMarks">My Bookmarks</s:a></li> 
    <li><s:a action="viewSupport">Support</s:a></li> 
</ul> 

लिंक http://localhost/viewHome को सही ढंग से गाया, http://localhost/viewSearch, आदि 2.1.8

के तहत हम सिर्फ 2.2.1 Struts करने के लिए उन्नत:

यहाँ JSP कोड है कि के लिंक की स्थापना की है किसी ने इस संस्करण से v2.3.4.1 तक जांच की है) और अब स्ट्रिंग्स एक्शन लिंक http://localhost/viewHome.action, http://localhost/viewSearch.action इत्यादि के रूप में प्रस्तुत कर रहे हैं,

मेरे शोध से पता चला है कि सामान्य सुझाव डी समाधान

<constant name="struts.action.extension" value=""/> 

स्ट्रिप्स.एक्सएमएल में .action प्रत्यय को हटाने के लिए उपयोग करना है। हालांकि यह यूआरएल सही तरीके से प्रस्तुत करता है, यह एक अप्रत्याशित दुष्प्रभाव पैदा कर रहा है। स्ट्रूट्स अब सोचता है कि प्रत्येक यूआरएल एक कार्रवाई है जिसमें .css, .png, आदि के लिए अनुरोध शामिल हैं।

web.xml में मेरा फ़िल्टर-मैपिंग नहीं बदला है। और हालांकि भेजता/* Struts के लिए हम 2.1.8

<filter> 
    <filter-name>struts2</filter-name> 
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>struts2</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

के तहत इस व्यवहार नहीं देखा था इस मैं कार्रवाई के रूप में इन अनुरोधों को इलाज करने की कोशिश Struts को रोकने के लिए excludePattern उपयोग करने के लिए मिला है प्रतिक्रिया करने के लिए।

<constant name="struts.action.excludePattern" value="/index.html,/images/.*,/js/.*,/css/.*"/> 

जबकि इस काम करता है, पिछले बाधा है कि मेरे लॉग Struts टैग अनुरोध से त्रुटियों कि Struts कार्रवाई के रूप में संभाला जा रहा है से भरे हुए हैं है। जब मैं इन यूआरआई को पैटर्न को बाहर करने के लिए जोड़ता हूं तो स्ट्रैट्स डोजो टैग कुछ पृष्ठों में काम नहीं कर रहे हैं।

struts.xml के कुछ हिस्सों को प्रभावित कर रहे हैं:

<constant name="struts.devMode" value="true" /> 
<!-- Set URL's to have no .action extension --> 
<constant name="struts.action.extension" value=""/> 
<constant name="struts.action.excludePattern" value="/index.html,/images/.*,/js/.*,/css/.*"/> 

और लॉग में Struts त्रुटियों का एक उदाहरण है:

2012-09-26 17:12:57,984 [http-bio-8080-exec-9] ERROR org.apache.struts2.dispatcher.Dispatcher- Could not find action or result 
/struts/dojo/struts_dojo.js 
There is no Action mapped for namespace [/] and action name [struts_dojo.js] associated with context path []. - [unknown location] 
    at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185) 
    at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63) 
    at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39) 
    at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58) 
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:501) 
    at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) 
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:680) 

मुझे यकीन है कि अगर struts डोजो अनुरोध कर रहे हैं नहीं कर रहा हूँ वास्तविक यूआरआई या आभासी या कुछ और।

यह इस बिंदु पर महसूस करता है कि मैंने निश्चित रूप से कुछ हुप्स के माध्यम से कूद दिया है ताकि यह सुनिश्चित किया जा सके कि 2.1.8 पर वापस जाने के लिए अनिवार्य रूप से एक स्पष्ट समस्या क्या है जो JAR पर वापस जा रहा है लेकिन मैं ' यदि संभव हो तो आगे बढ़ने का तरीका निर्धारित किया गया है।

किसी भी मदद की बहुत सराहना की जाती है।

+0

Humm, ऐसा लगता है कि एक पेज lib struts_dojo.js अनुरोध कर रहा है । क्या आप स्ट्रूट्स के लिए डोजो प्लगइन का उपयोग कर रहे हैं? यह बहिष्कृत है। यदि नहीं, तो क्या आप उस पुस्तकालय का अनुरोध कर रहे कोड को प्रदान कर सकते हैं? –

उत्तर

17

इस
<constant name="struts.action.extension" value=","/> जैसे कॉमा के साथ स्ट्रेट्स एक्शन एक्सस्टेंशन का उपयोग करने का प्रयास करें।
struts2 गुण से दायर:

DefaultActionMapper आप कर सकते हैं एक अल्पविराम से अलग सूची प्रदत्त सेवाओं, जैसे द्वारा प्रयुक्त struts.action।एक्सटेंशन = एक्शन, जेएनएलपी, रिक्त एक्सटेंशन आपको स्थिर संसाधनों के साथ हस्तक्षेप किए बिना निर्देशिका प्रविष्टियों के साथ-साथ शुद्ध क्रिया नाम से मिलान करने की अनुमति देता है, जिसे अल्पविराम से पहले खाली स्ट्रिंग के रूप में निर्दिष्ट किया जा सकता है। struts.action.extension =, या struts.action.extension = एक्स, वाई, जेड ,, struts.action.extension = कार्रवाई ,,

+1

यह काम किया। धन्यवाद Aleksandr। एक बार जब मैंने अल्पविराम जोड़ा तो लाइन पढ़ता है: '<निरंतर नाम =" struts.action.extension "value =", "/>' सब कुछ पूर्व-स्ट्रैट 2.2.1 व्यवहार पर वापस चला गया। मुझे '<निरंतर नाम =" struts.action.excludePattern "value ="/index.html,/images /.*,/ js /.*,/ css के साथ स्थिर सामग्री को स्पष्ट रूप से बहिष्कृत करने की आवश्यकता नहीं थी /.* "/>' और इसे भी बाहर ले जाने में सक्षम था। –

+0

मुझे खुशी है कि मैं मदद कर सकता हूं। –

+0

यह 'name = "struts.action.extension" value = ", action" 'को सेट करने में भी मदद करता है, ताकि .action के साथ-साथ कोई प्रत्यय कार्य न हो। – Akku