Wicket sirviendo imágenes del Sistema de archivos

Soy bastante nuevo en Wicket y tengo algunas dificultades con el uso de referencias de recursos. Estoy usando wicket 1.5.4 y tengo el siguiente problema: almaceno imágenes en el sistema de archivos. Tengo la clase ImageElement que contiene parte de la ruta del archivo en relación con rootFilePath configurado (es decir, dir1 / dir2 / img1.png). En la página agrego Imagen de la siguiente manera:

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

os parámetros de la página @where incluyen el parámetro de ruta de la imagen (ruta = "/ dir1 / dir2 / img1.png"). Mis preguntas son:

Es la forma más sencilla de servir imágenes del sistema de archivos? ¿Está bien usar ResourceReference con método estático? o debería construir cada vez una nueva ResourceReference? Vi que en la versión anterior era posible usar una nueva ResourceReference (globalId), pero parece que ya no es así. Si es así, ¿para qué sirve la referencia global de recursos? Según tengo entendido, se supone que la referencia de recursos es fábrica para los recursos, por lo que sería bastante extraño crear una nueva fábrica para cada solicitud de recursos.La última pregunta es, ¿cómo puedo pasar la ruta a la imagen de una mejor manera para que no tenga que concatenar los parámetros indexados para construir la ruta una vez que se invoca el método de respuesta en ImageResource.¿Cuál sería el mejor escenario para que funcione de manera eficiente y simple? Vi el ejemplo en 'Wicket en acción', pero esto está destinado a la generación dinámica de imágenes desde db y no estoy seguro de si se adapta a mi caso

Mi implementación de ResourceReference que monté en la aplicación en la ruta "/ images" se ve de la siguiente manera:

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);
    }

}

Cualquier ayuda y consejos apreciados! Gracias por adelantado

Respuestas a la pregunta(4)

Su respuesta a la pregunta