Zaten JSF 2.2 üzerindeyseniz, ResourceHandler
numaralı bir özel kimlik sağlayarak bunu yapabilirsiniz, burada istediğiniz görünüm kaynağını createViewResource()
içinde döndürürsünüz. aşağıda faces-config.xml
kayıtlıdır
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;
}
}
:
<application>
<resource-handler>com.example.FaceletsResourceHandler</resource-handler>
</application>
Yoksa henüz JSF 2.2 üzerinde değilseniz, o zaman bunun yerine ResourceResolver
kullanın. veritabanından kaynak sağlamak amacıyla, sen/kurtarırdın ya (onları önbelleğinizde, ne olursa olsun yol
<context-param>
<param-name>javax.faces.FACELETS_RESOURCE_RESOLVER</param-name>
<param-value>com.example.FaceletsResourceResolver</param-value>
</context-param>
: aşağıda web.xml
kayıtlıdır
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;
}
}
temp) disk dosya sistemi böylece aracılığıyla URL
sağlayabilir veya db://
gibi özel bir protokol icat ve gerçek bir iş gerçekleştirmek için özel bir URLStreamHandlerFactory
ve URLStreamHandler
uygulama sağlamak DB'den Burada bir başlangıç örneğini bulabilirsiniz Registering and using a custom java.net.URL protocol.
Merhaba BalusC.Bu işe başladım. Ben gerçek .xhtml sayfaları alıyorum ile iyi çalışıyor gibi görünüyor. Ancak, şablon kullanılarak çalışmak gibi görünmüyor. Şu an aldığım şu anki hatayı göstermek için soruyu düzenliyorum. – JeffJak
Dosya mevcut değil. Başlama örneğini 'File # exists()' testini kullanmak ve 'null' olmadığında döndürmek. – BalusC
Sorunu çözdüm ... Çözümünüz işe yarıyor. Ancak, şablonu nasıl tanımladığına bağlı. Örneğin şablon = "myfile.xhtml" kullanırsam başarısız olur. Ama ben şablon = "/ myfile.xhtml" yaparsam ResourceResolver'a girer. – JeffJak