すでにJSF2.2を使用している場合はResourceHandler
、目的のビューリソースをで返すカスタムを提供することでこれを行うことができますcreateViewResource()
。
public class FaceletsResourceHandler extends ResourceHandlerWrapper {
private ResourceHandler wrapped;
public FaceletsResourceHandler(ResourceHandler wrapped) {
this.wrapped = wrapped;
}
@Override
public ViewResource createViewResource(FacesContext context, final String name) {
ViewResource resource = super.createViewResource(context, name);
if (resource == null) {
resource = new ViewResource() {
@Override
public URL getURL() {
try {
return new File("/some/base/path", name).toURI().toURL();
} catch (MalformedURLException e) {
throw new FacesException(e);
}
}
};
}
return resource;
}
@Override
public ResourceHandler getWrapped() {
return wrapped;
}
}
以下のように登録されfaces-config.xml
ています:
<application>
<resource-handler>com.example.FaceletsResourceHandler</resource-handler>
</application>
または、JSF 2.2をまだ使用していない場合は、ResourceResolver
代わりに使用してください。
public class FaceletsResourceResolver extends ResourceResolver {
private ResourceResolver parent;
public FaceletsResourceResolver(ResourceResolver parent) {
this.parent = parent;
}
@Override
public URL resolveUrl(String path) {
URL url = parent.resolveUrl(path); // Resolves from WAR.
if (url == null) {
try {
url = new File("/some/base/path", path).toURI().toURL();
} catch (MalformedURLException e) {
throw new FacesException(e);
}
}
return url;
}
}
以下のように登録されweb.xml
ています:
<context-param>
<param-name>javax.faces.FACELETS_RESOURCE_RESOLVER</param-name>
<param-value>com.example.FaceletsResourceResolver</param-value>
</context-param>
方法に関係なく、データベースからリソースを提供するには、それらを(一時)ディスクファイルシステムに保存/キャッシュして、URL
を介して提供できるようにするFile
かdb://
、カスタムURLStreamHandlerFactory
およびURLStreamHandler
DBからのストリーミングの実際のジョブを実行するための実装。キックオフの例は、カスタムjava.net.URLプロトコルの登録と使用にあります。