Калитка, обслуживающая изображения из файловой системы

Я довольно новичок в Wicket, и у меня есть некоторые трудности с использованием ссылок на ресурсы. Я использую калитку 1.5.4 и имею следующую проблему: я храню изображения в файловой системе. У меня есть класс ImageElement, который содержит часть пути к файлу относительно настроенного rootFilePath (т.е. dir1 / dir2 / img1.png). На странице я добавляю изображение следующим образом:

new Image("id",ImagesResourceReference.get(), pageParameters)

где параметры страницы включают параметр пути к изображению (путь = "/ dir1 / dir2 / img1.png"). Мои вопросы:

Это самый простой способ подачи изображений из файловой системы?Можно ли использовать ResourceReference со статическим методом? или мне надо каждый раз строить новый ResourceReference? Я видел, что в предыдущей версии можно было использовать новый ResourceReference (globalId), но, похоже, это уже не так. Если да, то для чего нужен глобальный ресурс? Насколько я понимаю, ссылка на ресурс должна быть фабрикой для ресурсов, поэтому было бы довольно странно создавать новую фабрику для каждого запроса ресурса.Последний вопрос заключается в том, как лучше передать путь к изображению, чтобы мне не приходилось объединять проиндексированные параметры для построения пути после вызова метода ответа в ImageResource.Каков наилучший сценарий, чтобы заставить его работать эффективно и просто, я видел пример в «Калитке в действии», но это предназначено для динамического генерирования изображений из БД, и я не уверен, подходит ли он для моего случая

Моя реализация ResourceReference, которую я смонтировал в приложении под путем "/ images", выглядит следующим образом:

public class ImagesResourceReference extends ResourceReference {

private static String rootFileDirectory;

private static ImagesResourceReference instance;

private ImagesResourceReference() {
    super(ImagesResourceReference.class, "imagesResourcesReference");
}

public static ImagesResourceReference get() {
    if(instance == null) {
        if(StringUtils.isNotBlank(rootFileDirectory)) {
            instance = new ImagesResourceReference();
        } else {
            throw new IllegalStateException("Parameter configuring root directory " +
                    "where images are saved is not set");
        }
    }
    return instance;
}

public static void setRootFileDirectory(String rootFileDirectory) {
    ImagesResourceReference.rootFileDirectory = rootFileDirectory;
}

private static final long serialVersionUID = 1L;

@Override
public IResource getResource() {

    return new ImageResource(rootFileDirectory);
}

private static class ImageResource implements IResource {

    private static final long serialVersionUID = 1L;

    private final String rootFileDirectory;

    public ImageResource(String rootFileDirectory) {
        this.rootFileDirectory = rootFileDirectory;
    }

    @Override
    public void respond(Attributes attributes) {

         PageParameters parameters = attributes.getParameters();
         List<String> indexedParams = getAllIndexedParameters(parameters);
         if(!indexedParams.isEmpty() && isValidImagePath(indexedParams)) {
             String pathToRequestedImage = getImagePath(indexedParams);
             FileResourceStream fileResourceStream = new FileResourceStream(new File(pathToRequestedImage));
             ResourceStreamResource resource = new ResourceStreamResource(fileResourceStream);
             resource.respond(attributes);
         }
    }

    private boolean isValidImagePath(List<String> indexedParams) {
        String fileName = indexedParams.get(indexedParams.size() -1);
        return !FilenameUtils.getExtension(fileName).isEmpty();
    }

    private List<String> getAllIndexedParameters(PageParameters parameters) {
        int indexedparamCount = parameters.getIndexedCount();
        List<String> indexedParameters = new ArrayList<String>();
        for(int i=0; i<indexedparamCount ;i++) {
            indexedParameters.add(parameters.get(i).toString());
        }
        return indexedParameters;
    }

    private String getImagePath(List<String> indexedParams) {
        return rootFileDirectory + File.separator + StringUtils.join(indexedParams, File.separator);
    }

}

Любая помощь и советы приветствуются! Заранее спасибо.

Ответы на вопрос(2)

Ваш ответ на вопрос