解決路徑的另一種方法是重寫UserAgentCallback#resolveURI
,它提供了比固定URL更加動態的行爲(如在AtilaUy的答案,這看起來相當有效在大多數情況下)。
這是我如何做一個XHTMLPane
使用動態生成的樣式表:
public static UserAgentCallback interceptCssResourceLoading(
final UserAgentCallback defaultAgentCallback,
final Map< URI, CSSResource > cssResources
) {
return new UserAgentCallback() {
@Override
public CSSResource getCSSResource(final String uriAsString) {
final URI uri = uriQuiet(uriAsString) ; // Just rethrow unchecked exception.
final CSSResource cssResource = cssResources.get(uri) ;
if(cssResource == null) {
return defaultAgentCallback.getCSSResource(uriAsString) ;
} else {
return cssResource ;
}
}
@Override
public String resolveURI(final String uriAsString) {
final URI uri = uriQuiet(uriAsString) ;
if(cssResources.containsKey(uri)) {
return uriAsString ;
} else {
return defaultAgentCallback.resolveURI(uriAsString) ;
}
}
// Delegate all other methods to defaultUserAgentCallback.
} ;
}
然後,我用它這樣的:
final UserAgentCallback defaultAgentCallback =
xhtmlPanel.getSharedContext().getUserAgentCallback() ;
xhtmlPanel.getSharedContext().setUserAgentCallback(
interceptCssResourceLoading(defaultAgentCallback, cssResources)) ;
xhtmlPanel.setDocumentFromString(xhtml, null, new XhtmlNamespaceHandler()) ;
這必須是基於Spring的解決方案。 –