[英]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.