解决路径的另一种方法是重写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的解决方案。 –