2015-12-18 51 views
1

我有一個web應用程序(基於Spring,Struts 2),我試圖在主struts.xml配置中動態地包含一個struts配置文件,基於屬性。基於屬性的struts.xml配置中的參數文件包含

已經定義,在屬性文件:

key=foo 

我嘗試使用它裏面的struts.xml:

<struts> 
    ... 
    <include file="/config/struts/struts-${key}.xml" /> 
</struts> 

包括 「支柱-foo.xml」 文件(或其他文件,具體取決於值)。

屬性文件在啓動時由Spring加載,我可以在Spring的xml文件中使用它來參數化bean定義。

+0

struts.xml的文件調用LocalizedTextUtil.addDefaultResourceBundle ("messages/customize")不是由彈簧加載更容易做到這一點。 –

+0

感謝Aleksandr;有沒有另一種方式來讀取struts文件中的屬性/參數? – dipanda

+1

您可以在構建應用時替換關鍵字。或者將所有文件包含在struts.xml中,並只將其中的一部分複製到包中。 –

回答

0

您可以利用Struts2插件框架。

您基本上創建了一個基於jar的項目,其中包含所有特定客戶端的動作映射,支持類等。如果您還要部署到Servlet 3.0或更高版本的容器中,還可以選擇包含UI工件在jar的META-INF \ resources目錄中也可以清理打包。

現在,您通常將內容放置在struts.xml中用於動作映射,您只需將其放置在struts-plugin.xml中,然後將此xml文件放入jar文件的根目錄即可。

當Struts2框架啓動時,將掃描jar文件,struts-plugin.xml文件將被選中並自動包含在您的應用程序中。

我使用與我的maven構建過程相同的設置,以便如果客戶端的部署不假設包含特定功能或者要定製標準功能,我可以自定義來自庫存的動作映射那些。

在我們的例子中,股票應用是一個基於struts插件的jar,它在任何其他jar之前被加載,然後加載後續的特性jar來擴展或覆蓋功能。實際的WAR項目內部很少,主要是用於部署其他項目工件組合的工件。

0

你知道你可以改變struts.xml的配置文件名稱,如下:

<filter> 
    <filter-name>struts2</filter-name> 
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 
    <init-param> 
     <param-name>config</param-name> 
     <param-value>struts-config.xml</param-value> 
    </init-param> 
</filter> 

您可以使用此功能的struts.xml動態地改變。

您需要擴展StrutsPrepareAndExecuteFilter並在此處加載您的動態配置。在web.xml中用struts替換新的fildter。

public class MyStrutsPrepareAndExecuteFilter extends StrutsPrepareAndExecuteFilter{ 

    @Override 
    protected void postInit(Dispatcher dispatcher, FilterConfig filterConfig) { 
     //load your config here   

    } 

} 

請看看StrutsPrepareAndExecuteFilter的源代碼。你可以看到如何加載配置,你可以如何改變它。


如果你只想動態更改應用程序的消息,你可以通過剛剛在MyStrutsPrepareAndExecuteFilter

相關問題