2012-04-26 79 views
4

我一直在試圖讓Primefaces應用程序渲染的圖像。 這是手風琴面板外工作的罰款:如何呈現在JSF + Primefaces圖像3.2

<h:graphicImage library="images" name="testi.JPG" /> 

但是當我嘗試使用它手風琴面板內部,它不工作了:

<p:accordionPanel> 
    <p:tab title="Godfather Part I"> 
     <h:panelGrid columns="2" cellpadding="10"> 
      <h:graphicImage library="images" value="testi.JPG" /> 

有在Primefaces圖像標籤,但沒有圖書館標籤可言,所以我想,還有:

<p:tab title="Godfather Part II"> 
     <h:panelGrid columns="2" cellpadding="10"> 
        <p:graphicImage url="/resources/images/testi.jpg" /> 

所以有人能告訴我該怎麼做的,什麼是做正確的方式,因爲有很多不同的選擇,但在我的情況下沒有任何工作?我怎麼能像通用圖像文件夾一樣添加到我的應用程序中,哪裏沒有路徑等等?

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head><link type="text/css" rel="stylesheet" href="/temp/faces/javax.faces.resource/theme.css?ln=primefaces-flick" /><link type="text/css" rel="stylesheet" href="/temp/faces/javax.faces.resource/primefaces.css?ln=primefaces&amp;v=3.2" /><link type="text/css" rel="stylesheet" href="/temp/faces/javax.faces.resource/layout/layout.css?ln=primefaces&amp;v=3.2" /><script type="text/javascript" src="/temp/faces/javax.faces.resource/jquery/jquery.js?ln=primefaces&amp;v=3.2"></script><script type="text/javascript" src="/temp/faces/javax.faces.resource/primefaces.js?ln=primefaces&amp;v=3.2"></script><script type="text/javascript" src="/temp/faces/javax.faces.resource/layout/layout.js?ln=primefaces&amp;v=3.2"></script> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
     <title>Primefaces Template</title></head><body> 

查看源代碼給: 這是手風琴面板之外,它是工作:

<h:graphicImage library="images" name="testi.JPG" /> 

---------------- ---> HTML:

<img src="/temp/faces/javax.faces.resource/testi.JPG?ln=images" /> 

在手風琴面板使用的代碼相同線正在工作的面板之外:

<p:tab title="Godfather Part I"> 
     <h:panelGrid columns="2" cellpadding="10"> 
      <h:graphicImage library="images" value="testi.JPG" /> 
      <h:outputText value="The story begins as Don Vito Corleone, 

------------------> HTML:

<td><img src="testi.JPG" /></td> 
<td>The story begins as Don Vito Corleone, 

使用Primefaces標籤:

<p:tab title="Godfather Part II"> 
     <h:panelGrid columns="2" cellpadding="10"> 
        <p:graphicImage url="/resources/images/testi.jpg" /> 

-----------------> HTML:

<td><img id="j_idt29:j_idt32" src="/temp/resources/images/testi.jpg" alt="" /></td> 

編輯:這是工作,但爲什麼?

<h:graphicImage value="#{resource['images:testi.JPG']}"/> 

沒有S的資源!

謝謝! 薩米

+0

從你提供的代碼應該可以工作(如果圖像路徑是正確的)。它與Primefaces展示相同。你能否發佈更多的代碼(至少是頁面的頭部和完整的accordionPanel)。 – 2012-04-26 13:47:01

+0

我添加了一些更多的代碼和頭文件和源代碼html代碼。它與展示完全相同,我的圖片位於資源/圖片/中。 – Sami 2012-04-26 16:05:09

回答

14

你的錯誤是,你使用的value屬性,而不是name屬性:

<h:graphicImage library="images" value="testi.JPG" /> 

當引用的資源,你必須使用屬性name代替。

<h:graphicImage library="images" name="testi.JPG" /> 

value屬性即指向的URL,而不是資源名稱。


無關的具體問題,你沒有完全瞭解如何正確使用library屬性。它並不打算將圖像,CSS和JS文件彼此分開。在那裏,您已經有了<h:graphicImage><h:outputStylesheet><h:outputScript>標籤的唯一標記名。 library屬性應該用於模塊化Web應用程序,其中image/CSS/JS文件存儲在外部JAR文件中。 library屬性允許您對它們進行版本控制,並通過主webapp覆蓋它們。也What is the JSF resource library for and how should it be used?

見修復您的<h:graphicImage>刪除那錯library屬性用法:

<h:graphicImage name="images/testi.JPG" /> 

或介紹你把所有的資源在fullworthy特定的Web應用程序庫:

<h:graphicImage library="default" name="images/testi.JPG" /> 
+0

謝謝!你能告訴我爲什麼這個工作嗎? 沒有S的資源?混亂。 U經常回答,你知道很多,所以你能告訴我如何國際化facelets嗎?我正在使用全局捆綁和Netbeans。 – Sami 2012-04-26 17:26:48

+0

最後沒有工作,或者我錯了,但其他人都做了。我的意思是: Sami 2012-04-26 17:33:35

+0

'#{resource}'將給定資源名稱轉換爲URL。至於最後一個例子,將'images'文件夾放在另一個名爲'default'的文件夾中。所以:'/ resources/default/images/testi.JPG'。如果你有更新的版本,你可以創建例如'/ resources/default/1_1/images/testi.JPG'和JSF資源處理程序將自動提供它。 – BalusC 2012-04-26 17:43:26