在外部固定磁盘文件系统路径而不是 WAR 中查找 Facelets 文件
Lookup Facelets files in external fixed disk file system path instead of in WAR
我正在尝试将 JSF (2.2.10) 集成到非 JSF 现有项目中。
为了符合现有项目结构,我想自定义 Mojarra 搜索页面的路径而不修改 url(或使用外部 url-rewrite)
访问JSF页面的路径
http://my.web.app/context/faces/page1.xhtml
基本上查找方案将从
webapp\
templates\
WEB-INF\
lib
page1.xhtml
page2.xhtml
etc...
至
mydir_outside_webapp\
templates\
page1.xhtml
page2.xhtml
etc...
...
webapp\
templates\
WEB-INF\
lib
我找不到自定义 JSF 以实现所需行为的方法。
啊,应用程序没有捆绑在 war 中,而是部署在目录结构中
感谢您的支持!
您可以使用自定义 ResourceHandler
for this wherein you override createViewResource()
方法先签入外部文件夹。
public class ExternalResourceHandler extends ResourceHandlerWrapper {
private ResourceHandler wrapped;
private File externalResourceFolder;
public ExternalResourceHandler(ResourceHandler wrapped) {
this.wrapped = wrapped;
externalResourceFolder = new File("/path/to/external/resources");
}
@Override
public ViewResource createViewResource(FacesContext context, String path) {
ViewResource resource = super.createViewResource(context, path); // First try local.
if (resource == null) { // None found? Try external.
final File externalResource = new File(externalResourceFolder, path);
if (externalResource.exists()) {
resource = new ViewResource() {
@Override
public URL getURL() {
try {
return externalResource.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.ExternalResourceHandler</resource-handler>
</application>
我正在尝试将 JSF (2.2.10) 集成到非 JSF 现有项目中。 为了符合现有项目结构,我想自定义 Mojarra 搜索页面的路径而不修改 url(或使用外部 url-rewrite)
访问JSF页面的路径
http://my.web.app/context/faces/page1.xhtml
基本上查找方案将从
webapp\
templates\
WEB-INF\
lib
page1.xhtml
page2.xhtml
etc...
至
mydir_outside_webapp\
templates\
page1.xhtml
page2.xhtml
etc...
...
webapp\
templates\
WEB-INF\
lib
我找不到自定义 JSF 以实现所需行为的方法。 啊,应用程序没有捆绑在 war 中,而是部署在目录结构中
感谢您的支持!
您可以使用自定义 ResourceHandler
for this wherein you override createViewResource()
方法先签入外部文件夹。
public class ExternalResourceHandler extends ResourceHandlerWrapper {
private ResourceHandler wrapped;
private File externalResourceFolder;
public ExternalResourceHandler(ResourceHandler wrapped) {
this.wrapped = wrapped;
externalResourceFolder = new File("/path/to/external/resources");
}
@Override
public ViewResource createViewResource(FacesContext context, String path) {
ViewResource resource = super.createViewResource(context, path); // First try local.
if (resource == null) { // None found? Try external.
final File externalResource = new File(externalResourceFolder, path);
if (externalResource.exists()) {
resource = new ViewResource() {
@Override
public URL getURL() {
try {
return externalResource.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.ExternalResourceHandler</resource-handler>
</application>