簡體   English   中英

無法使用h:graphicImage JSF 2.0顯示圖像

[英]Can't display image with h:graphicImage JSF 2.0

我寫了一個從網絡攝像頭拍照的bean。 我想在JSF 2.0頁面中顯示這些圖像並每n秒更新一次。

如果我這樣給路徑名指定eclipse中的文件,它將起作用:

public String getNewPhoto() {
        try {
            File dir = new File("C:/Users/User/MyApp/images/");
            FileUtils.cleanDirectory(dir);
        }catch(Exception ex) {
            ex.printStackTrace();
        }

    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());

    try {
        webcam = Webcam.getDefault();
        webcam.open();
        ImageIO.write(webcam.getImage(), "PNG", new File("C:/Users/User/MyApp/images/"+ timeStamp + ".png"));
        webcam.close();
    }catch(Exception ex) {
        ex.printStackTrace();
    }

    return "C:/Users/User/MyApp/images/" + timeStamp + ".png"; 

}

使用以下XHTML:

      <p:graphicImage value="#{myBean.newPhoto}" id="photo" cache="false" />
      <p:poll interval="1" listener="#{myBean.increment}" update="photo" />

可以預期,以上所有內容在我的Eclipse開發環境中均能正常工作。 我想將此部署到我的服務器(Linux)。 當我從上面看到的路徑更改為

/ var / lib / tomcat7 / webapps / MyApp / images

然后保存了圖像,但是我無法在h:graphicImage中顯示它們。 我也嘗試通過:

http://hostname:8080/MyApp/images/....

到h:graphicImage並且仍然沒有骰子,我確定我缺少真正簡單的東西。 任何幫助表示贊賞!

您還需要在圖像保存行中進行更改。

ImageIO.write(webcam.getImage(), "PNG", new File("C:/Users/User/MyApp/images/"+ timeStamp + ".png"));

怎么樣:

視圖

<p:graphicImage value="#{photoBean.newPhoto}" id="photo" cache="false" />
<p:poll listener="#{photoBean.updatePhoto}" interval="1"
    update="photo" />

托管豆

@ManagedBean
@RequestScoped
public class PhotoBean {

    private String realPath;
    private String realtivePath;

    @PostConstruct
    public void init() {
        realtivePath = "/images/webcam.png";
        ExternalContext externalContext = FacesContext.getCurrentInstance()
                .getExternalContext();
        realPath = externalContext.getRealPath(realtivePath);
    }

    public void updatePhoto() {
        try {

            File file = new File(realPath);
            file.delete(); // cleanup
            // Use file object to write image...

        } catch (IOException e) {
            // Implement some exception handling here
            e.printStackTrace();
        }
    }

    public String getNewPhoto() {
        return realtivePath;
    }
}

更多注意事項(獲取者)

在getter(getNewPhoto)中處理網絡攝像頭圖像不是一個好主意,因為JSF可能多次調用getter。

請參閱: 為什么JSF多次調用getters

時間戳記

我已經從文件名中刪除了時間戳。 我認為您已添加它以防止瀏覽器緩存。 這不是必需的,因為cache=false已經創建了唯一的圖像URI。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM