JSF'de resource lar (css, js vb..) /javax.faces.resource/* şeklinde başlayacak şekilde header içine eklenmektedir.
Eğer sizin siteniz başka bir sitenin içinde iframe'de gösterilmek istendiğinde sorun çıkabilmektedir.
Bunun yerine bu resource'ları DOMAIN
/javax.faces.resource/* şeklinde eklenmesini sağlayabilirsiniz.
Bu işlemi yapabilmek için ResourceHandlerWrapper extend edilmelidir. Örneğin sınıf aşağıdaki gibidir :
import javax.faces.application.*;
public class DomainResouceHandler extends ResourceHandlerWrapper {
private ResourceHandler wrapped;
public DomainResouceHandler(ResourceHandler wrapped) {
this.wrapped = wrapped;
}
@Override
public Resource createResource(final String resourceName, final String libraryName) {
final Resource resource = super.createResource(resourceName, libraryName);
return new ResourceWrapper() {
@Override
public String getRequestPath() {
return "http://example.com/"+resource.getRequestPath();
}
@Override
public Resource getWrapped() {
return resource;
}
};
}
@Override
public ResourceHandler getWrapped() {
return wrapped;
}
}
DomainResouceHandler sınıfı ResourceHandlerWrapper'dan extend edilmiş ve createResource method'u override edilmiştir.
Yeni bir ResourceWrapper yaratılmış ve verilmiştir. Bu resource wrapper'da getRequestPath methodunun için değiştirilip domain eklenmiştir.
Bu şekilde http://example.com/javax.faces.resource/* şeklinde domain altından resource'ların yüklenmesi sağlanmıştır
Bu handler çalışması için aşağıdaki ifadenin faces-config.xml'de olması gerekiyor:
<application>
<resource-handler>com.done.rabbit.support.resource.DomainResouceHandler</resource-handler>
</application>