2014-03-27 98 views
3

我用Struts 2的Web應用程序與下面的操作映射工作通配符動作映射:下劃線和Struts 2的

<action name="something_*" class="foo.whatever.MyAction" method="{1}"> 
    <result>blah/myJsp.jsp</result> 
    ... 
</action> 

所以,如果我加載URL /something_load.action,它調用MyAction.load(),等等。小菜一碟。令我感到困惑的是,加載/something.action也有效(我想它是調用​​方法)。 這怎麼可能?我的動作映射應該與「something_」匹配,但我的網址中沒有underescore。 它應該給我一個錯誤!不應該嗎?

我已經仔細檢查了struts配置文件中沒有「something.action」的另一個映射。我也檢查了web.xml文件,以防萬一......如果我使用通配符映射,我會想到的唯一解釋是在Struts中忽略下劃線。但是,加載/something_load.action,/some_thing_lo_ad.action ...並沒有什麼區別,事實並非如此。

我知道這一定是一個非常不好的問題,但我一直無法解決這個謎題,既沒有通過Stackoverflow的問題也沒有看到Strutsdocumentation

這是主要的struts.xml文件:

<struts> 
    <constant name="struts.enable.DynamicMethodInvocation" value="false" /> 
    <constant name="struts.devMode" value="false" /> 
    <constant name="struts.freemarker.templatesCache" value="true" /> 

    <package name="default" extends="struts-default"> 
    <!-- interceptors ... --> 
    <!-- global results for error pages --> 
    </package> 

    <!-- lots of includes --> 
</struts> 
+0

似乎最後一個下劃線正在「修剪」(顯然,那些在動作名稱中間的不是)。奇怪的東西,+1 –

+0

@AndreaLigios感謝您的編輯,我想知道爲什麼我的XML顯示沒有語法突出:) – AJPerez

+0

是的,如果朗不能完全由標籤推斷,你需要添加語法熒光筆代碼(將這個問題標記爲「xml」只是爲了讓它格式化是不對的:) –

回答

1

看來,通配符,以支持一些傳統的語法鬆散匹配。所以問題不在於下劃線,而在於匹配模式鬆散。

javadocs

模式可以選擇匹配 「鬆散」。當模式的結尾匹配\*[^*]\*$(通配符,無通配符,通配​​符)時,如果模式失敗,它也會匹配,就好像最後兩個字符不存在一樣。目標是支持傳統的"*!*"語法,其中"!*"是可選的。

+0

我看到那段Struts 2.3文檔。它不在Struts 2.0.x的等價頁面上,它是我們使用的版本。我想它的表現完全一樣,儘管沒有在文檔中提到過......我想運行一些測試來完全確定,但我沒有時間去做(這就是爲什麼我花了很長時間才能接受答案,對此感到抱歉:) – AJPerez