2011-10-09 86 views
1

我正在使用Tapestry開發我的第一個項目,我即將完成,除了圖像..使用Tapestry5在我的應用程序之外顯示圖像

我想要什麼?我只需要在我的應用程序之外顯示一個圖像,例如: /home/app/images/image.jpg

我嘗試了什麼?我一直在「谷歌搜索」並閱讀Tapestry5論壇,我發現了這個:http://wiki.apache.org/tapestry/Tapestry5HowToStreamAnExistingBinaryFile

我按照步驟創建了類,但是我需要顯示嵌入在另一個頁面上的圖像(所以我不能使用ImagePage),我試過這個:

頁面java類

public StreamResponse getImage() { 
     InputStream input = DetallesMultimedia.class 
       .getResourceAsStream("/home/santi/Escritorio/evolution-of-mario.jpg"); //On application, i will retrieve this from DB 
    return new JPEGInline(input,"hellow"); 
} 

頁面模板

... 
<img src="${image}" alt:image/> 
... 

... 
${image} 
... 

很可能,這不起作用我真的不知道怎麼辦呢。我讀到了關於在事件上加載圖像的事情(在上面的HowTo中,就像在上面的HowTo中所說的那樣返回OutputStream)但是我的英語非常糟糕(我相信你已經注意到了)我不明白我怎麼能去做。

你能幫幫我嗎?

謝謝大家。

回答

0

我從來沒有在維基頁面上看過這些例子。下面介紹如何使用StreamResponse在類路徑中加載圖像的一些代碼。

@Inject 
private ComponentResources resources; 

@OnEvent(value = "GET_IMAGE_STREAM_EVENT") 
private Object getProfilePic() throws Exception { 


    InputStream openStream = DetallesMultimedia.class.getResourceAsStream("/home/santi/Escritorio/evolution-of-mario.jpg"); 
    byte[] imageBytes = IOUtils.toByteArray(openStream); 
    final ByteArrayInputStream output = new ByteArrayInputStream(imageBytes); 

    final StreamResponse response = new StreamResponse() { 

     public String getContentType() { 
      "image/jpegOrPngOrGif"; 
     } 

     public InputStream getStream() throws IOException { 
      return output; 
     } 

     public void prepareResponse(Response response) { 
      // add response headers if you need to here 
     } 

    }; 
    return response; 
} 

public String getPicUrl() throws Exception { 
    return resources.createFormEventLink("GET_IMAGE_STREAM_EVENT"); 
} 

在模板:

<img src="${picUrl}"/> 
+0

嗨joostschouten,感謝你回答。我有一個問題:這意味着什麼「String uri = empty_profile_pic.toClientURL(); 」?此外,我做錯了,因爲圖像不加載,我得到了異常(方法es.udc.turismo.web.pages.pdi.multimedia.DetallesMultimedia.onActivate(長),參數#1:強制的picUrl類型java.lang.Long(通過字符串 - >長))。看來我不能用onActivate方法在頁面中顯示圖像:S。 – Santi

+0

該行是一個錯誤。我從我自己的頁面上獲取了需要的代碼。我現在從我的答案中刪除了它。至於你的例外情況,你可能在你的onActivate方法中有一個Long參數,在那裏你用一個字符串「picUrl」激活頁面。 Tapestry無法弄清Long「picUrl」應該是什麼,並引發異常。刪除論點或提供適當的強制。 – joostschouten

+0

再次感謝你,joostschouten。如果我執行強制,我會修正什麼?我的意思是,我需要onActivation在我的數據庫中加載其他數據。我無法刪除onActivation,如果我執行強制措施,我該怎麼辦?將字符串映射到0?無論如何,我認爲我必須閱讀更多關於脅迫的概念。謝謝:) – Santi

相關問題