2011-02-10 46 views
0

我有一個現有的應用程序使用Struts2在「/portals/.../A」和「/portals/.../B」下提供的應用程序部分。配置文件看起來像這樣:如何在純Struts2下配置一個包,在Struts2 + Rest Plugin下配置另一個包?

<struts> 
    <package name="portals/*" extends="struts-default"> 
     <action name="A" ...> ...</action> 
     <action name="B" ...> ...</action> 
    </package> 
</struts> 

這工作正常,直到我添加休息插件罐子。它似乎接管並忽略了這些設置。

理想情況下,我想要的是保持門戶不變,並添加一個名爲「休息」的新包,由休息插件處理。

http://localhost/portals/ * ....普通的struts2

http://localhost/rest/ * ...的struts2 +其餘插件

的問題是 「如何?」。

我加了一些休息-插件的設置,如:

<constant name="struts.convention.action.suffix" value="Controller"/> 
<constant name="struts.convention.action.mapAllMatches" value="true"/> 
<constant name="struts.convention.default.parent.package" value="rest-default"/> 

但舊的操作仍然打破。

回答

0

我還沒有看到有人在包名中放置了一個asterix。你的包是這樣實際上可能是「門戶/ *」

意味着

「/門戶網站/ * /」將需要調用先於內的動作。

IE:「... /門戶網站/ */A.action」會叫的行動A.反正它是所有參與,如果你只需要調用更清晰的說:

<package name="portals" extends="struts-default" namespace="/"> 
    ... 
</package> 

你可以有通配符在行動中。它所做的是捕獲部分url,讓你動態調用方法/類並設置匹配該通配符的參數,詳情請參見:http://struts.apache.org/2.1.8.1/docs/wildcard-mappings.html但據我所知,這不能應用於包。

+0

這可能不是設置它的標準方式,而是將包作爲「門戶/ *」的包提供服務,如「/portals/ABC/tenant.action」。當我添加插件時,它全部中斷。我能夠獲得「/門戶/租戶」的工作,但由於這個應用程序正在使用,我不能改變此時的URL結構。 – Artilheiro 2011-02-10 23:36:24