繁体   English   中英

如何在运行时从JSF控制器访问位于“ src / main / resources”文件夹中的css文件

[英]How can I access a css file located in my “src/main/resources” folder from my JSF controller at runtime

我需要能够从后端Java控制器访问存储在src / main / resources / styles下的Web应用程序的css文件。 我想使用它们来通过iText创建PDF输出。

换句话说,我想做这样的事情:

CssFile cssFile1 = XMLWorkerHelper.getCSS(new FileInputStream("src/main/resources/styles/my.css"));

但是,由于接收到如下异常,我显然没有正确处理此问题:

java.io.FileNotFoundException: styles\standard.css (The system cannot find the path specified)

如何在控制器中检索这些文件?

我试过了,但是没有用,同样的错误:

String rcp = econtext.getRequestContextPath();
CssFile cssFile1 = XMLWorkerHelper.getCSS(new FileInputStream(rcp + "src/main/resources/styles/my.css"));

FileInputStream在本地磁盘文件系统上运行,并且所有相对路径都相对于当前工作目录,该目录是在启动JVM时即打开的本地磁盘文件系统文件夹。 这绝对不是src/main/resources文件夹的根。

鉴于/src/main/resources可识别为类路径资源根目录的Maven文件夹结构,那么您只需要通过ClassLoader#getResourceAsStream()将其作为类路径资源获取即可。

InputStream input = getClass().getResourceAsStream("/styles/standard.css");
// ...

或者,如果该类可能被打包在另一个类加载器加载的JAR中。

InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("styles/standard.css");
// ...

也可以看看:

那是因为JSF是一个Web应用程序。 现在将styles/my.css移至WEB-INF/styles/my.css确保您在控制器中访问的文件是WebApp的一部分

现在您可以使用

XMLWorkerHelper.class.getResourceAsStream("styles/my.css")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM