2011-12-27 1 views
1

Я действительно не знаю, является ли это проблемой Netbeans, но вот в чем проблема: В моем веб-приложении jsf в корневом каталоге, У меня есть папка с именами ресурсов, которая содержит изображения подпапок, css и js (для javascript). Вложенные папки содержат соответствующий контент. Вот как я ссылаться на скрипт (например) из приложения:Мои изображения в папке ресурсов моего приложения jsf удаляются, когда я «Очищаю и строю»

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

проблема, когда я чищу и строить, в то время как файлы в CSS каталоги и JS каталоги остаются нетронутыми, все изображения, хранящиеся в каталог изображений удаляется. Как тогда я могу использовать механизм ресурсов jsf, если он уничтожит мои изображения на каждой «чистой и сборке»?

ответ

1

JSF не делает это. Это сервер делает это. Эта проблема указывает, что вы вручную сохраняете (загруженные?) Изображения в расширенной папке WAR, а не где-то вне ее. «Чистая и перестроенная» просто очищает рабочую папку сервера и старые расширенные WAR и восстанавливает webapp на основе оригинальной 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, и загляните в собственные исходные коды ResourceHandlerImpl и ResourceImpl Mojarra.

+0

My my! BalusC, ты легенда! Действительно, как ты так хорошо себя чувствовал? – Emmanuel

+0

Годы опыта :) – BalusC

+0

Возможно. Но, простите меня, я должен настаивать, что в этом есть еще больше. Вы «всего» 34 (ваш профиль говорит), и поэтому с глубоким знанием у вас есть эти технологии - некоторые из них подразумевают, что вы читаете технические спецификации, в то время как большинство из нас использует учебники - очевидно, что существует больше, чем «лет» Это. 61 099 просмотров профиля говорит, что я не единственный, кто так думает. Ты такой человек, которого я хотел бы иметь на своем месте работы. Я бы «сосал» все, что мог, из вас :-) Хотел бы я знать секрет. Очень хочу. Может быть, вы должны написать кое-что, чтобы помочь lil 'людям, как я пытаюсь получить задиры. – Emmanuel

Смежные вопросы