java - 当我 "Clean and Build"时,我的 jsf 应用程序资源文件夹中的图像被删除

标签 java jsf

我真的不知道这是否是 Netbeans 问题,但问题是: 在我的 jsf Web 应用程序的根目录中,我有一个名为 resources 的文件夹,其中包含子文件夹 images、css 和 js(用于 javascript)。子文件夹包含各自的内容。以下是我如何从应用程序内引用脚本(例如):

   <h:outputScript library="js" target="head" name="dialog.js"/>

问题是,当我清理和构建时,虽然 css 目录和 js 目录中的文件保持不变,但 images 目录中的所有图像都被删除。如果 jsf 资源机制会在每次“清理和构建”时删除我的图像,那么我该如何使用它呢?

最佳答案

JSF 不这样做。这是由服务器完成的。此问题表明您正在手动将(上传?)图像存储在展开的 WAR 文件夹中,而不是其外部的某个位置。 “清理和重建”只是清理服务器的工作文件夹和旧的扩展 WAR,并根据原始 WAR 重建 Web 应用程序(本质上是开发时的项目结构)。顺便说一句,这不仅发生在开发中,而且在生产中每当您重新部署新的 WAR 文件时也会发生。

此行为是按照规范进行的。您不应该手动将文件放入展开的 WAR 文件夹中,并期望它们神奇地包含在原始 WAR 文件中或在重新部署时保留。

将它们存储在 WAR 之外的固定且永久的位置。如果将外部路径作为新上下文添加到服务器,则可以通过 <img> 引用它们或<h:graphicImage value>通常的方式。 另请参阅Load images from outside of webapps / webcontext / deploy folder using <h:graphicImage> or <img> tag .

如果您确实需要让 JSF 资源处理程序解析它们,以便您可以在类似 <h:graphicImage library="uploads" name="foo.png> 中使用它们,那么你需要实现一个自定义 ResourceHandler 。它看起来像这样:

public class UploadedResourceHandler extends ResourceHandlerWrapper {

    private ResourceHandler wrapped;

    public MyResourceHandler(ResourceHandler wrapped) {
        this.wrapped = wrapped;
    }

    @Override
    public ResourceHandler getWrapped() {
        return this.wrapped;
    }

    @Override
    public Resource createResource(String resourceName, String libraryName) {
        if ("uploads".equals(libraryName)) {
            return new YourCustomUploadedResourceImpl(resourceName);
        } else {
            return super.createResource(resourceName, libraryName);
        }
    }

}

要使其运行,请按如下方式在 faces-config.xml 中注册它:

<application>
    <resource-handler>com.example.UploadedResourceHandler</resource-handler>
</application>

然而,用一个答案来概括这一点并不完全是微不足道的。您还需要了解 HTTP(缓存)的工作原理。只需阅读 javadocs,从 ResourceHandler 开始,并在 Mojarra 自己的 ResourceHandlerImpl 中查看和ResourceImpl源代码来了解这个想法。

关于java - 当我 "Clean and Build"时,我的 jsf 应用程序资源文件夹中的图像被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8640832/

相关文章:

jsf - 库primefaces 不包含组件步骤

jquery - 通过 JQuery 在 JSF inputText 控件上写入数据

javascript - 将参数传递给 p :remoteCommand from JavaScript

java - 有哪些方法可以在 Java 中为 XenApp 检索时区设置?

构造函数中的 Java 成员初始化

java - 过滤自定义数据结构的设计模式

css - 如何停止 richfaces 风格?

java.lang.ClassCastException : $Proxy96 cannot be cast to ticket. app.DatesFacade 错误

java - 每次访问都需要解释 Java 或 Ruby?

java - 在 Android 上查找音高