0

ディレクトリをリンクに変換するには? liferay で Galleria プラグインを使用して画像を表示しようとしましたが、何も表示されません。Google Chrome の「要素の検査」モードでは、次のように表示されます。

ここに画像の説明を入力

Chrome で次のメッセージが表示されます。

ローカル リソースの読み込みが許可されていません: file:///E:/​​Liferay/liferay-portal-6.1.1-ce-ga2/tomcat-7.0.27/webapps/Xplor-…et/WEB-INF/files/images/ 130621_ジムジュリ_IO9032193908/IO9032193908_0001.jpg

コードは次のとおりです。

<div style="background-color: white; padding: 5px; border: 1px black solid;">
    <p:commandButton type="button" value="Show Images" onclick="dialogImg.show()" />
</div>
<p:dialog header="Images" widgetVar="dialogImg" modal="true" draggable="false" resizable="false" width="540" height="370">
    <p:galleria value="#{viewBacking.images}" var="image" panelWidth="510" panelHeight="310" showCaption="true">  
        <p:graphicImage value="#{image}" title="description"/>  
    </p:galleria>
</p:dialog>

バッキング Bean:

public class ViewBacking {
    private List<String> images;
    public List<String> getImages() {
        return images;
    }

    public ViewBacking() {
        try {
            getImageList();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public void getImageList() {
        images = new ArrayList<String>();
        File[] imageList = getFileList("//images//imgfolder//"); 
        //--> It will returns: E:\Liferay\liferay-portal-6.1.1-ce-ga2\tomcat-7.0.27\webapps\Xplor-portlet\WEB-INF\files\images\imgfolder\IMAGE_NAME.EXT

        for (int i = 0; i < imageList.length; i++) {
            if (imageList[i].isFile())
                images.add("/files/images/" + imageList[i].getName()); //UPDATE
        }
    }

    //This is how I get a directory path
    public File[] getFileList(String path) {
        File folder = new File(getPath(path));
        File[] listOfFiles = folder.listFiles();
        return listOfFiles;
    }
    public String getPath(String fileName) {
        ExternalContext extContext = FacesContext.getCurrentInstance().getExternalContext();
        return extContext.getRealPath("//WEB-INF//files//" + fileName);
    }
}

上記のコードでわかるように、画像ソースは次のようなもので満たされE:\Liferay\liferay-portal-6.1.1-ce-ga2\tomcat-7.0.27\webapps\Xplor-portlet\WEB-INF\files\images\imgfolder\IMAGE_NAME.EXTますhttp://localhost:8080/IMAGE_LINK。ありがとう。


アップデート

ディレクトリを次のように変更しようとしました:

WebContent
 |-- META-INF
 |-- WEB-INF
 |    |-- files
 |    |    `-- ...
 |    `-- web.xml
 |-- files
 |    |-- images
 |    |    `-- foo.png
 |    |    `-- bar.png
 |    |    `-- baz.png
 :

ガレリアにはまだ画像が表示されません。のようにアクセスしようとするとhttp://localhost:8080/files/images/foo.png、ブラウザは を返しますThe requested resource was not found.。上記のコードでわかるように、images[]意志は次のようなもので満たされています。

/files/images/foo.png
/files/images/bar.png
/files/images/baz.png

view sourceしかし、Chrome でモードをチェックしているときに、次のように返されます。

/Xplor-portlet/files/images/foo.png
/Xplor-portlet/files/images/bar.png
/Xplor-portlet/files/images/baz.png
4

1 に答える 1

2

それらを外/WEB-INFに置いて、一般にアクセスできるようにします。

例えば

WebContent
 |-- META-INF
 |-- WEB-INF
 |    |-- files
 |    |    `-- ...
 |    `-- web.xml
 |-- images
 |    |-- foo.png
 |    |-- bar.png
 |    `-- baz.png
 :

このようにして、次のようにアクセスできます

<p:graphicImage value="/images/foo.png" />
<p:graphicImage value="/images/bar.png" />
<p:graphicImage value="/images/baz.png" />

ローカル ディスク ファイル システム パスの代わりに、これらのパス"/images/foo.png""/images/bar.png"、などを正確に生成するだけです。"/images/baz.png"Web サイトにアクセスするエンドユーザーが、それらのファイルを自分のディスク ファイル システムのまったく同じ場所に持っているとは限らないため、これはまったく意味がありません。


具体的な問題とは関係ありませんが、ExternalContext#getRealPath()この目的で使用することはお粗末な方法です。null一部のサーバー構成では、WAR ファイルがディスクではなくメモリに展開される場合があります。むしろ使用してExternalContext#getResourcePaths()ください。

于 2013-06-22T13:29:23.900 に答える