2011-08-05 20 views
0

我使用Geronimo和J2EE 5以及Tomcat 6,並試圖使用JSF創建一個簡單頁面。我把標籤庫文件myfaces_core.tldmyfaces_html.tld放在WEB-INF中,它可以工作,但只是在Windows上。在Linux下,當我部署WAR時,我得到了IOException未知原因。刪除兩個標籤庫文件使得部署成爲可能。但是當我在瀏覽器中打開該頁面時,出現錯誤。它缺少文件WEB-INF/myfaces_html.tld,它在JSP文件的頭文件中指定。在MyFaces的示例中,不使用MyFaces TLD,而使用普通的Sun Java TLD。我已將URI WEB-INF/myfaces_html.tld覆蓋爲http://java.sun.com/jsf/html螞蟻現在我收到錯誤絕對uri:http://java.sun.com/jsf/html無法在web.xml或使用此應用程序部署的jar文件中解析失去的JSF初學者:Linux,Geronimo和標籤庫

我迷路了。我必須或必須將標記庫描述文件放入我的WAR以使用JSF組件嗎?這些文件已經包含在Geronimo Container的MyFaces JAR中,不是嗎?容器必須具有相同的行爲,無論是平臺還是不需要?我該怎麼做才能真正實現與平臺無關的簡單應用?

回答

1

您應該而不是將提取第三方標記庫的JAR文件並將其寬鬆的TLD文件放入/WEB-INF文件夾中。 TLD文件應保存在JAR文件中,並且JAR文件應該保持原樣,並且只能放在運行時類路徑中。無論書本/教程/論壇是否建議,否則應列入黑名單。

清理項目結構以擺脫那些鬆散的頂級域名(TLD)文件並撤銷與此相關的每一項變更,當然也可以在web.xml(如果有的話)中取消。

您的/WEB-INF/lib文件夾應該只包含兩個文件,以便讓JSF在Tomcat 6上運行:一個文件表示抽象API,另一個代表具體實現。正如你顯然選擇使用MyFaces的,這將是這兩個JAR文件(可能與在文件末尾的版本號,這取決於):

  • MyFaces的-api.jar中
  • MyFaces的,IMPL .jar

將它們放在/WEB-INF/lib文件夾中,該文件夾是webapp的默認運行時類路徑的一部分。就這樣。下一步將聲明並映射您的webapp的web.xml中的FacesServlet

確保您正在閱讀正確的書籍/教程。

+0

Linux上的JSF-servlet似乎有些問題。在Windows上它工作。 Geronimo已經包含JSF實現(MyFaces)。根據(MyFaces教程)JSF標準,從[WEB-INF]目錄中刪除TLD文件並更新HTML和Core庫的URI(將URI更改爲'http://java.sun.com/jsf/ html'和'http:// java.sun.com/jsf/html')只是一個小改正,沒有任何效果。它在Windows下工作,而不是在Linux下工作。 _unknown reason_很可能在Linux上的Geronimo容器中的某處,位於JSF servlet中。 –

+0

如果容器已經附帶了JSF,你實際上不應該在webapp中包含任何東西,或者你需要指定一個特定於容器的配置文件或上下文參數,它指示容器**而不是**加載容器捆綁的JSF庫(這對於JBoss AS,Glassfish等至少如此)。 – BalusC