問題
- 有沒有辦法以編程方式配置相當-的面孔,不使用漂亮-config.xml文件?
- 如果必須使用pretty-config.xml;有沒有什麼辦法來以編程方式覆蓋/增加它的UrlMapppings?
問題背景:
在我的情況mapppings必須來自於另一個XML資源,還有一些額外的邏輯對待它。所以我設計了以下解決方案 我實現了一個ServletContextAttributeListener,我監視時prettyConfig對象由PrettyFilter添加到servlet上下文Prettyfaces編程配置
@Override
public void attributeAdded(ServletContextAttributeEvent event) {
Object value = event.getValue();
if(value != null && value instanceof PrettyConfig){
PrettyConfig prettyConfig = (PrettyConfig)value ;
try {
PrettyFacesConfigProvider provider = new PrettyFacesConfigProvider() ;
PrettyConfig config = provider.loadConfiguration(event.getServletContext());
prettyConfig.setMappings(config.getMappings());
} catch (Exception ex) {
Logger.getLogger(CRSWebListener.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
PrettyFacesConfigProvider
類是建立我的自定義映射配置的實現。我檢查了更新後的配置,似乎所有映射都已正確添加。但是,如果我採取這種方式,映射沒有任何影響。當然,如果我把這個映射放在pretty-config.xml中,它可以很好地工作。
我使用非常-面臨3.3.3,JSF 2.2,黃金面臨4.0,Tomcat的7
我其實曾經嘗試過SPI技術,但無法使其工作。上面代碼中的類** PrettyFacesConfigProvider **實際上是完全相同的SPI兼容實現。您的評論後,我再次嘗試,它的工作。它不工作的原因是我把spi配置文件放在了錯誤的地方。我在資源目錄中創建了一個** META-INF/services **,把文件放在那裏和賓果! – thorondor