Доступ к изображениям из каталога ресурсов в проекте Maven Facelets - PullRequest
1 голос
/ 23 февраля 2012

Во-первых, пожалуйста, прости меня, если я спрашивал об этом раньше (у меня проблемы с памятью из-за опухоли головного мозга.)

Я пытаюсь свернуть управляемый компонент для получения изображений из каталога, но нене знаю, как получить URL для следующих мест:

1) каталог ресурсов 'Maven & 2) каталог веб-приложений / изображений (изнутри моего управляемого компонента.

все еще нормально использовать h:datatTable для отображения данных, так как я понимаю, что таблицы несколько устарели? Нет?

Я написал большую часть нужного компонента и просто ищу информацию о том, как (если это возможно) найтиURL-адрес или установите URL-адрес в качестве управляемого свойства.

пакет com.buhaugane.util;

/**
 * Created by IntelliJ IDEA.
 * User: Yucca http://thejarbar.org
 * Date: 2/23/12
 * Time: 10:21 AM
 * To change this template use File | Settings | File Templates.
 */


import org.apache.commons.collections.ArrayStack;

import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import java.io.File;
import java.util.Arrays;
import java.util.List;

/**
 * Contain utility methods to interact with images.
 */
@ManagedBean(name = "images")
public class ImageBean {
    List<File> images;

    static String thumbUrl;
    static String fullSizeURL;

    /**
     * Returns all thumbnails at specified url
     */
    public static List<File> thumbnails (){
        thumbUrl=//can I get it from context if I can't set url as a manages property?


        File[] files = new File(thumbUrl).listFiles();
        List<File> returnList = Arrays.asList(files);
        return returnList;
    }

    /**
     * Returns all full-sized images at specified url
     */
    public static List<File> fullSized (){
        thumbUrl=**//can I get it from context if I can't set url as a manages property?**


        File[] files = new File(thumbUrl).listFiles();
        List<File> returnList = Arrays.asList(files);
        return returnList;
    }
}

Большое спасибо, Юкка

1 Ответ

1 голос
/ 23 февраля 2012

Вы можете использовать ExternalContext#getRealPath() для преобразования заданного относительного веб-пути в абсолютную файловую систему диска.Таким образом, чтобы получить абсолютный путь к файловой системе на диске для папки /images в общедоступном веб-контенте, выполните следующие действия:

String relativeWebPath = "/images";
String absoluteDiskPath = FacesContext.getCurrentInstance().getExternalContext().getRealPath(relativeWebPath);
File imagesFolder = new File(absoluteDiskPath);
// ...

Следует иметь в виду, что вышеперечисленное не будет работать при настройке сервераразвернуть WAR в память, а не на диск.getRealPath() вернул бы null при любых обстоятельствах.Вам нужно искать альтернативный подход, например, хранить его вне WAR по фиксированному пути или, может быть, в базе данных.


Кроме того, все еще в порядкеиспользовать h: datatTable для отображения данных, поскольку я понимаю, что таблицы несколько устарели? Нет?

Таблицы не устарели.Они по-прежнему идеально подходят для представления табличных данных.Только использование таблиц для разметки действительно считается плохой практикой, поскольку это не семантическое и, следовательно, плохое для SEO.В терминах JSF мы говорим об использовании <h:panelGrid> для определения макета страницы (например, заголовок, тело, нижний колонтитул и т. Д.).Вместо этого вы должны использовать <div> s, которые могут быть сгенерированы с помощью <h:panelGroup layout="block">.

...