2012-09-26 8 views
9

Struts 2.1.8で実行していたすべてのStrutsアクションが期待通りに機能しています。つまり、hrefがStrutsアクションにレンダリングされます。拡張子なし。 2.1.8CSS、JavaScript、Struts Dojoを中断させる原因となるStruts2 .action拡張

の下で私達はちょうど(Strutsの2.2.1にアップグレードなどhttp://localhost/viewHomeに正しくレンダリング

<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/viewSearch、:ここで

は、リンクをのセットアップJSPコードですこれからすべてのバージョンをv2.3.4.1にチェックしました)、Strutsのアクションリンクがhttp://localhost/viewHome.action,http://localhost/viewSearch.actionなどのように表示されています。

私の研究は、一般的な提案d解決策は、.action接尾辞を削除するstruts.xmlに

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

を使用することです。これによりURLが正しくレンダリングされますが、予期しない副作用が発生します。 StrutsはすべてのURLが.css、.pngなどのリクエストを含むアクションだと考えています。

web.xmlのフィルタマッピングに変更はありません。そしてけれどもそれは送信/ *私たちは、私はアクションとしてこれらの要求を処理しようとしているのStrutsを停止するexcludePatternを使用しなければならなかったこれに対抗するには

<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> 

2.1.8の下で、この動作を見ていないのStrutsします。

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

この作品なくなり、最後のハードルは私のログはStrutsアクションとして処理されているStrutsのタグ要求からのエラーに満ちているということです。これらのURIを除外パターンに追加すると、一部のページでStruts Dojoタグが機能していないように見えます。影響を受けた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) 

私はストラット道場要求があるかどうかわからないんだけど実際のURIまたは仮想またはその他のもの。

2.1.8 JARに戻るとすべてが解決されるということを考えれば、URLから.action拡張子を削除するという本質的に単純な問題を修正するために、可能であれば進む道を見つけることを決めました。

ご協力いただきありがとうございます。

+0

ヒュムは、ページがLIB struts_dojo.jsを要求していると思われます。 Strutsにdojoプラグインを使用していますか?これは推奨されていません。そうでない場合は、そのライブラリを要求しているコードを提供できますか? –

答えて

17

struts action exstensionをこのようなコンマで試してみてください。
<constant name="struts.action.extension" value=","/> Struts2のプロパティから
ファイル:DefaultActionMapper で使用さ

をあなたは、例えば、カンマ区切りのリストを提供することができますstruts.action。extension = action、jnlp、do ブランク拡張子を使用すると、静的リソースに干渉することなく、純粋なアクション名 とディレクトリリストを一致させることができます。空の文字列 をカンマの前に指定できます。 struts.action.extension =、またはstruts.action.extension = X、Y、Z ,, struts.action.extension =アクション,,

+1

それはうまくいった。 Aleksandrありがとうございます。コンマを追加すると、行は次のようになります。 ' すべてがpre-struts 2.2.1の動作に戻りました。 ''を実行し、それを取り出すこともできました。 –

+0

私は助けることができてうれしいです。 –

+0

これは 'name =" struts.action.extension "value ="、action "を設定するのにも役立ちます。その結果、.actionと接尾辞は機能しません。 – Akku

関連する問題