2010-09-07 47 views
1

首先兩個包,請原諒我的不理解......我還在學習:)Struts2的 - 在struts.xml中指向動態Web根

我有我的支柱2包。 xml擴展了一個基礎包,我希望能夠通過在瀏覽器中輸入類似於http://site.com/application/1/ThisAction.action和/application/2/ThisAction.action(示例)的內容來訪問它們。

我在我的webapp文件夾中創建了兩個名爲'1'和'2'的目錄,我可以使用上面的URL導航到兩個包。我想要做的是將我的jsps放入jsp目錄中,而不是webapps。所以不是我的兩個文件夾駐留在/ webapp中,而應該駐留在/ webapp/jsp /中。

我試着將兩個軟件包的命名空間更改爲/ 1/jsp /而不是簡單的'/ 1',但我什麼也沒有得到。它只是告訴我沒有任何操作映射到該操作名稱。

有沒有人有任何見解我如何能做到這一點?谷歌沒有給我很多幫助,但可能只是我沒有尋找正確的東西。

這裏就是我指的是一個快速示例:

<struts> 
    <!-- Base--> 
    <package name="base" extends="struts-default" abstract = "true" namespace="/base"> 



<global-results> 
    <result name="cancel" type="redirectAction">CancelAction</result> 
    <result name="close">closewindow.jsp</result> 
    <result name="error">/jsp/wizard/GeneralError.jsp</result> 
    </global-results> 



    </package> 

    <package name="1" extends="base" namespace="/1"> 

回答

4

在Struts 2你不需要根據把你的JSP在不同的文件夾您用來訪問它們的網址。相反,軟件包和操作一起來創建URL,結果將決定下一個視圖。因此,您首先編寫您的動作:

public class MyActionClass ...{ 

    ... 
    public String actionMethod() { 
    //Your action code here 
    return SUCCESS; 
} 
} 

接下來,您將在struts.xml中創建一個指向此操作的條目。

<package name="default" extends="struts-default"> 
    <!--Interceptors, Global Results etc.--> 
    <action name="myaction" class="my.package.MyActionClass" method="actionMethod"> 
     <result>/WEB-INF/path/to/yourpage.jsp</result> 
    </action> 
    ... 
</package> 

現在,訪問這個動作在默認包只需使用網址:http://yourserver/myaction.action

如果你創建第二個包有不同的名稱是這樣的:

<package name="2" extends="default" namespace="/2" > 

     <action name="myaction" class="my.package.MyActionClass" method="actionMethod"> 
     <result>/WEB-INF/path/to/yourpage.jsp</result> 
     </action> 
    ... 
    </package> 

然後,您可以訪問的URL的行動:http://yourserver/2/myaction.action

因此,如果您願意,您可以繼續並將JSP放入名爲jsp的目錄中,並且您只需修改結果以指向正確的位置即可。

+0

對不起,我一定沒有正確解釋我自己。我們希望有兩個獨立的這些jsps副本。換句話說,我們希望擁有/jsp/1/yourpage.jsp以及/jsp/2/yourpage.jsp。我認爲你所描述的包含一個用於這兩個包的jsp,是否正確? – jacosta 2010-09-08 18:16:00

+0

不,我只是說您需要按照我所建議的方式設置包和操作,以便按照您想要的方式構建URL。因此,如果它們是兩個單獨的JSP頁面,請繼續爲它們創建文件夾,只需讓不同操作的結果指向相應文件夾中的相應JSP頁面即可。 – 2010-09-09 01:00:24

+0

您提到的內容肯定會起作用,但如果我們有相當數量的操作並且我們不想在每個軟件包中執行相同操作,該怎麼辦? 查看struts2文檔後,我可以通過在設置struts.enable.SlashesInActionNames = true之後在操作中使用通配符來實現這一點,但根據操作本身的調用方式,我的結果似乎有所不同(具體方法'結果')。 我想我可能能夠弄清楚這一點多一點調整.. 感謝您的幫助!這聽起來像我在正確的軌道上? – jacosta 2010-09-09 06:32:50