У меня есть дублированный конфигурационный файл под 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>
Все это работает хорошо, но я хочу спросить экспертов, если она является наиболее подходящий способ сделать это, или если это может быть каким-то образом упрощено ???
Заранее спасибо за ваши подсказки и советы
Какую версию Spring и JSF вы используете? – Ravi
Spring 3.1.1 & JSF 2.0 (Mojarra 2.0.6?) – webmeiker