2014-04-29 64 views
0

我正在維護一個應用程序,其中在幾百個Jsps和tagx文件中我需要替換幾個硬編碼字符串 - 替換值將從屬性文件驅動正在讀如何從屬性文件中將值提取到Jsp/tagx

在我的春天MVC應用程序的屬性文件被讀像這樣:

<context:property-placeholder location="classpath*:someProps.properties, someOther.properties" /> 

沒有可以被添加到沒有id屬性,我無法通過獲取值ID,所以這個選項已經出來。

internet上的唯一解決方案是聲明PropertiesFactoryBean,然後使用spring eval讀取jsp/tagx。事情是這樣的:

<bean id="applicationProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
     <property name="singleton" value="true" /> 
     <property name="properties"> 
      <props> 
       <prop key="database.name">${database.name}</prop> 
      </props> 
     </property> 
    </bean> 

這很快就會變得非常麻煩,如果我需要閱讀大量的值(這看起來會是這樣很快在此應用程序)。在jsp/tagx文件中,是否有其他方法可以從屬性文件中讀取屬性? 這也有助於我理解,如果有人能告訴我PropertiesFactoryBean和上下文之間的差異:property-placeholder?

Spring版本3.2.2.RELEASE

+0

創建一個自定義JSP標記並相應地進行操作。 –

回答

1

您可以通過propertyplaceholder和使用JSP標籤春獲得在JSP中的屬性值:在您的上下文的xml:

<!-- PropertyPlaceHolder --> 
    <util:properties id="propertyConfigurer" location="WEB-INF/test/someProps.properties"/> 
    <context:property-placeholder properties-ref="propertyConfigurer"/> 

在你的JSP:

 <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> 
    ... 
    <spring:eval expression="@propertyConfigurer.getProperty('your.property1')" /> 
+0

這個答案的問題是util:屬性只會加載它讀取的最後一個屬性文件,並放棄其他模塊中其他spring xml文件讀入的所有其他屬性。 – happybuddha

+0

@happybuddha我們沒有一些魔法來猜測你正在加載的文件的數量。根據你的問題,你只提到一個屬性文件。 – Prasad

+0

更新了問題。你現在有答案嗎? – happybuddha

0

你可以嘗試國際化,在彈簧servlet.xml中添加的配置信息:

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> 
<!-- properties path -->      
<property name="basename" value="messages" />    
<property name="useCodeAsDefaultMessage" value="true" />   

,並在jsp文件,你只需要添加:<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> 那麼你可以從.propertise文件中的值,如:

<spring:message code="hello" arguments="111,222" argumentSeparator=","> 

祝你好運!