我将Geronimo与J2EE 5和Tomcat 6一起使用,并且尝试使用JSF创建一个简单的页面。我把标签库文件myfaces_core.tld
和myfaces_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文件中解决。
您应该而不是提取第三方标记库的JAR文件并将其松散的TLD文件放在/WEB-INF
文件夹中。TLD文件应该保存在它们产生的JAR文件中,JAR文件应该不受影响,只是放在运行时类路径中。任何书籍/教程/论坛都应该被列入黑名单。
清理您的项目结构,以摆脱那些松散的TLD文件,并撤销与此相关的每个更改,当然也包括web.xml
,如果有的话。
为了让JSF在Tomcat 6上运行,您的/WEB-INF/lib
文件夹应该只包含两个文件:一个文件表示抽象API,另一个文件表示具体实现。由于您显然已经选择使用MyFaces,它将是这两个JAR文件(可能在文件名末尾有版本号,这取决于):
- myfaces-api.jar
- myfaces-impl.jar
将它们放到/WEB-INF/lib
文件夹中,该文件夹是webapp默认运行时类路径的一部分。这是所有。下一步是在你的webapp的web.xml
中声明和映射FacesServlet
。
确保你读了合适的书/教程