2010-06-25 122 views
3

我想創建一個自定義標記與Facelets但它不呈現(即標記出現在響應中)。Facelets自定義標記不呈現

標籤(/WEB-INF/facelets/tags/inputThumbnailSelector.xhtml):

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:t="http://myfaces.apache.org/tomahawk"> 

<ui:composition> 
<div style="position: relative;"> 
    <img style="position: absolute; left: 0; top: 0;" src="#{image}"/> 
    <div class="thumbnail-selector" style="position: absolute; left: #{backingBean.thumbnailLeft}; top: #{backingBean.thumbnailTop};"/> 
</div> 
</ui:composition> 

</html> 

/WEB-INF/facelets/tags/panayk.taglib.xml:

<!DOCTYPE facelet-taglib PUBLIC "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN" "http://java.sun.com/dtd/facelet-taglib_1_0.dtd"> 

<facelet-taglib> 
<namespace>http://panayk.endofinternet.org/jsf</namespace> 
<tag> 
    <tag-name>inputThumbnailSelector</tag-name> 
    <source>inputThumbnailSelector.xhtml</source> 
</tag> 
</facelet-taglib> 

我的web.xml中包含:

<context-param> 
<param-name>javax.faces.FACELETS_LIBRARIES</param-name> 
<param-value>/WEB-INF/facelets/tags/panayk.taglib.xml</param-value> 
</context-param> 

這是如何將標記稱爲:

<!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" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:t="http://myfaces.apache.org/tomahawk" 
    xmlns:my="http://panayk.endofinternet.org/jsf"> 

<ui:composition template="/layout/layout.xhtml"> 
... 
    <my:inputThumbnailSelector image="${facesContext.externalContext.requestContextPath}/image/get.servlet?id=1" 
      backingBean="#{entryHandler}"/> 
... 
</ui:composition> 

</html> 

非常感謝提前!

+0

有人嗎?這仍然不起作用。 – 2010-06-25 16:28:13

回答

7

,我發現我的答案在這裏:https://community.oracle.com/thread/1719525

我想我找到了問題和解決方案(這是不是100%正確的)。 上下文參數應爲facelets.LIBRARIES而不是javax.faces.FACELETS_LIBRARIES

上下文參數javax.faces.FACELETS_LIBRARIES應該取代已棄用的(根據JSF規範棄用)上下文參數facelets.LIBRARIES。當使用後者時,服務器啓動期間會在日誌中發出警告,表明facelets.LIBRARIES已被棄用,應該使用javax.faces.FACELETS_LIBRARIES。但我認爲這僅用於記錄警告,即使用名稱facelets.LIBRARIES來構建自定義taglib組件。我說這不是100%正確,因爲它應該與新的參數名稱一起使用。還有其他一些有新名字的參數,但我還沒有測試過它們。

+1

@Panyiotis Karabassis:謝謝,這節省了我的一天。我的問題是使用facelet而不是facelets – bertie 2011-06-23 07:29:37

+0

不客氣!那麼這仍然是一個問題?我暫時還沒有編寫JSF,但我剛剛購買了「Face JavaServer Faces」一書(非常有希望),這本書講述的是JSF2.0,facelets作爲默認視圖層。它現在不應該「開箱即用」嗎? – 2011-06-23 18:43:48

+0

在我即將放棄時拯救了我..... – 2014-06-09 03:54:01

0

我建議做這樣的標籤:

<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:t="http://myfaces.apache.org/tomahawk"> 

<div style="position: relative;"> 
    <img style="position: absolute; left: 0; top: 0;" src="#{image}"/> 
    <div class="thumbnail-selector" style="position: absolute; left: #{backingBean.thumbnailLeft}; top: #{backingBean.thumbnailTop};"/> 
</div> 
</ui:composition> 

但一切似乎好,因爲您使用的佈局,你包裹自定義標籤的用戶界面:這樣定義?

<ui:define name="body"> 
<my:inputThumbnailSelector image="${facesContext.externalContext.requestContextPath}/image/get.servlet?id=1" 
      backingBean="#{entryHandler}"/> 
</ui:define> 
+0

是的,我用ui:define來包裝它。謝謝! – 2010-06-25 13:54:26