从Maven Facelets项目中的资源目录访问图像

时间:2012-02-23 12:59:20

标签: image url jsf-2 facelets managed-bean

首先,如果我之前已经问过这个问题,请原谅我(因为脑肿瘤会导致记忆问题。)

我正在尝试使用Managed Bean来从目录中获取图像,但是不知道如何获取以下位置的url:

1)Maven'资源'dir& 2)webapp / images目录(来自我的托管bean。

另外,使用h:datatTable来显示数据仍然没问题,因为据我所知,表格有些过时了吗?

我已经写了大部分所需的bean,我只是在寻找有关如何(如果可能)找到网址或将网址设置为托管属性的信息。

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

非常感谢,Yucca

1 个答案:

答案 0 :(得分:1)

可以使用ExternalContext#getRealPath()将给定的相对Web路径转换为绝对磁盘文件系统。因此,要获取公共webcontent中/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>代替<h:panelGroup layout="block">生成{/ 1}}。