2012-01-26 39 views
1

我無法將標記庫打包到戰爭文件中。我將標記從項目移動到當前項目現在依賴的額外庫。我把標籤庫文件放到jar包含標籤的META-INF目錄中(如何描述here)。但頁面不起作用:Facelet標記庫機制無法按預期工作

Expression Error: Named Object: eu.barbucha.barbatag.simple.PropertyTag not found. 

服務器能夠找到標籤庫。否則,頁面的作品,似乎只是一個華林:

Warning: This page calls for XML namespace http://barbucha.eu/tags declared with prefix br but no taglibrary exists for that namespace. 

因此,問題是:爲什麼服務器發現剛剛描述符,而不是類?當我將WEB-INF/lib/barbatag.jar中的課程複製到WEB-INF/classes並在管理控制檯中重新啓動Web應用程序時,該頁面即可正常工作。只有當服務器直接涉及應用程序的類時,服務器纔會查找UI組件,但不會保存在存儲在WEB-INF/lib目錄中的jar中。另一方面,服務器從jar中加載taglib描述符。這真是混亂...關鍵類的宣言:關鍵標籤的

package eu.barbucha.barbatag.simple;  

@FacesComponent("eu.barbucha.barbatag.simple.PropertyTag") 
public class PropertyTag extends UIComponentBase { ... } 

定義:

<tag> 
    <display-name>The component taking values from a property file</display-name> 
    <tag-name>property</tag-name> 
    <component> 
     <component-type>eu.barbucha.barbatag.simple.PropertyTag</component-type> 
    </component> 
</tag> 

一個potentionally重要的一點:我使用Spring MVC的。

+0

看來我的標籤庫JAR缺少'faces-config.xml'文件。 JSF規範不需要註釋掃描。 (請參閱[無法在jar中找到註釋的自定義JSF2組件](http://stackoverflow.com/questions/6150926/cannot-find-annotated-custom-jsf2-component-in-jar)) –

回答

3

您需要在JAR中提供一個/META-INF/faces-config.xml文件,以使JSF能夠掃描JAR文件以獲得具有JSF特定註釋的類,如@FacesComponent。這樣做是爲了防止JSF不必要地掃描每個JAR文件的類(如果你有很多類,這可能是非常耗時和耗費CPU的)。

+1

謝謝。空的'faces-config.xml'(僅包含<?xml version =「1.0」encoding =「UTF-8」?>')解決了我的問題。 –

+0

不客氣。 – BalusC