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.
My my! BalusC, ты легенда! Действительно, как ты так хорошо себя чувствовал? – Emmanuel
Годы опыта :) – BalusC
Возможно. Но, простите меня, я должен настаивать, что в этом есть еще больше. Вы «всего» 34 (ваш профиль говорит), и поэтому с глубоким знанием у вас есть эти технологии - некоторые из них подразумевают, что вы читаете технические спецификации, в то время как большинство из нас использует учебники - очевидно, что существует больше, чем «лет» Это. 61 099 просмотров профиля говорит, что я не единственный, кто так думает. Ты такой человек, которого я хотел бы иметь на своем месте работы. Я бы «сосал» все, что мог, из вас :-) Хотел бы я знать секрет. Очень хочу. Может быть, вы должны написать кое-что, чтобы помочь lil 'людям, как я пытаюсь получить задиры. – Emmanuel