2012-06-15 1 views
1

У меня есть дублированный конфигурационный файл под WEB-INF каталога, называемый configDEV.properties и configPRO.properties (один для среды разработки, а другой для производственной среды).Правильный способ передать свойство конфигурации, загруженные Spring в JSF мир

загружаю правильный файл, благодаря этим Спринг декларации и этот Tomcat параметр запуска:

<context:property-placeholder 
     location="WEB-INF/config${project.environment}.properties" /> 

-Dproject.environment=PRO 
(or –Dproject.environment=DEV) 

Затем в сервлета слушателя (так называемый StartListener) я делаю следующее, для того, чтобы позволить JSF для доступа к этим свойствам, в управляемых компонентах и ​​в представлениях jsp. (В бетоне мы будем играть с имуществом под названием cfg.skin.richSelector).

public class StartListener implements ServletContextListener { 

    public void contextInitialized(ServletContextEvent sce) { 
     //Environment properties 
     Map<String, String> vblesEntorno = System.getenv(); 

     //Project properties 
     String entorno = vblesEntorno.get("project.environment"); 
     String ficheroPropiedades = "/WEB-INF/config" + entorno + ".properties"; 
     try { 
      Properties props = new Properties(); 
      props.load(sc.getResourceAsStream(ficheroPropiedades)); 

      setSkinRichSelector(sc, props.getProperty("cfg.skin.richSelector")); 
     } catch (Exception e) { 
      //... 
     } 
    } 

    private void setSkinRichSelector(ServletContext sc, String skinRichSelector) { 
     sc.setInitParameter("cfg.skin.richSelector", skinRichSelector); 
    } 

    public void contextDestroyed(ServletContextEvent sce) {} 

} 

В JSF управляемый компонент:

public class ThemeSwitcher implements Serializable { 

    private boolean richSelector; 

    public ThemeSwitcher() { 

     richSelector = Boolean.parseBoolean(
      FacesContext.getCurrentInstance().getExternalContext().getInitParameter("cfg.skin.richSelector")); 

     if (richSelector) { 
      //do A 
     } else { 
      //do B 
     } 

    } 

    //getters & setters 

} 

На странице Xhtml:

<c:choose> 
    <c:when test="#{themeSwitcher.richSelector}"> 
     <ui:include src="/app/comun/includes/themeSwitcherRich.xhtml"/> 
    </c:when> 
    <c:otherwise> 
     <ui:include src="/app/comun/includes/themeSwitcher.xhtml"/> 
    </c:otherwise> 
</c:choose> 

Все это работает хорошо, но я хочу спросить экспертов, если она является наиболее подходящий способ сделать это, или если это может быть каким-то образом упрощено ???

Заранее спасибо за ваши подсказки и советы

+0

Какую версию Spring и JSF вы используете? – Ravi

+0

Spring 3.1.1 & JSF 2.0 (Mojarra 2.0.6?) – webmeiker

ответ

1

Это зависит от того, какая версия Spring вы используете. Если это случается, новейшим Spring 3.1, вы можете воспользоваться @Profile:

Springsource Blog

Springsource reference

+0

После публикации этого вопроса ставятся некоторые приоритетные задачи. Итак, пока у нас нет времени, чтобы попробовать ваши предложения. Может быть, на следующей неделе.В любом случае, спасибо. – webmeiker

+0

Хотя я еще не пробовал, он должен быть правильным ответом, поэтому я даю вам знак «Зеленый» – webmeiker

1

Оставьте свойство-заполнитель в вашем applicationContext.xml, если вы используете его в ваших весенних бобах.

Настройка контекст инициализация пары в вашем web.xml, как это:

<context-param> 
     <param-name>envProp</param-name> 
     <param-value>${project.environment}</param-value> 
    </context-param> 

двигаться также файл свойств под каким-нибудь пакетом в вашем пути к классам (Примечание: Из-за этого изменения необходимо найти ресурс в контекст приложения, используя путь к классам *: префикс)

, а затем вы можете загрузить пакет в вашей странице JSF, как это:

<f:loadBundle basename="com.examples.config#{initParam['envProp']}" var="msgs"/> 

и использовать что-то вроде этого:

<h:outputText value="#{msgs.cfg.skin.richSelector}" /> 

Но вместо того, чтобы свойство системы, как этот ProjectStage конфигурирования через JNDI, как упомянуто Райан Любке в его blog, так что вы можете использовать те же свойства, даже для javax.faces.PROJECT_STAGE параметра контекста.

+0

Спасибо за ваше предложение, но первые два абзаца не подлежат обсуждению: «У меня есть дублированный файл конфигурации в каталоге WEB-INF, называемом configDEV.properties и configPRO.properties (один для среды разработки, а другой для рабочей среды). Я загружаю нужный файл из-за этого объявления Spring и этого параметра запуска Tomcat « – webmeiker

+0

, а затем просто дублируя файлы будут лучшим способом сделать это и использовать, как указано выше. – Ravi

Смежные вопросы