यदि आप पहले से ही जेएसएफ 2.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>
तरह से की परवाह किए बिना डेटाबेस से संसाधन प्रदान करने के लिए, आप या तो बचाने/पर उन्हें कैश (होता है, temp) डिस्क फ़ाइल सिस्टम ताकि आप URL
केवल File
के माध्यम से प्रदान कर सकें, या db://
जैसे कस्टम प्रोटोकॉल का आविष्कार कर सकें और स्ट्रीम के वास्तविक काम को करने के लिए कस्टम URLStreamHandlerFactory
और URLStreamHandler
कार्यान्वयन प्रदान कर सकें डीबी से आईएनजी। आप यहां Registering and using a custom java.net.URL protocol पर किकऑफ उदाहरण पा सकते हैं।
हाय बलससी..यह मुझे शुरू करने में मदद मिली है। मुझे वास्तविक .xhtml पेज प्राप्त करने के साथ ठीक काम करना प्रतीत होता है। लेकिन यह टेम्पलेट का उपयोग करने के साथ काम नहीं कर रहा प्रतीत होता है। मैं वर्तमान त्रुटि को दिखाने के लिए प्रश्न को संपादित करता हूं जिसे मैं अब प्राप्त कर रहा हूं। – JeffJak
फ़ाइल स्पष्ट रूप से मौजूद नहीं है। 'फ़ाइल # मौजूद है()' परीक्षण का उपयोग करने के लिए किकऑफ उदाहरण बढ़ाएं और जब यह नहीं होता है तो 'null' वापस करें। – BalusC
मैंने इस मुद्दे को समझ लिया ... आपका समाधान काम करता है। लेकिन यह इस बात पर निर्भर करता है कि मैं टेम्पलेट को कैसे परिभाषित करता हूं। उदाहरण के लिए यदि मैं टेम्पलेट = "myfile.xhtml" का उपयोग करता हूं तो यह असफल हो जाएगा। लेकिन अगर मैं टेम्पलेट = "/ myfile.xhtml" करता हूं तो यह संसाधन रिसोल्वर में जाएगा। – JeffJak