我正在尝试在我的windows 7机器上设置Java/JSF应用程序的环境。我使用eclipse juno和从eclipse市场下载的Jboss AS 7。此外,我使用JDK 1.7。我创建了一个非常简单的应用程序,它只包含一个h:outputLabel标签。在部署和运行之前,一切看起来都很好,但是标记没有呈现。我想说的是,我得到了一个空白页。我为JSF包含的jar包括:JSF -api-2.1、JSF -impl-2.1.0-b03.jar、JSF -facelets-1.1.14.jar。以及常用的common和jstl jar。
没有错误或任何异常。我错过什么了吗?如果它太简单,请原谅我,但这只是占用太多时间。
编辑:我的自动创建的faces-config xml:
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
</faces-config>
My web xml:
<?xml version="1.0"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>test</display-name>
<welcome-file-list>
<welcome-file>NewFile.xhtml</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
</web-app>
我为JSF包含的jar是:JSF -api-2.1、JSF -impl-2.1.0-b03.jar、JSF -facelets-1.1.14.jar。以及常用的common和jstl jar。
这里有很多错误。首先,您不需要甚至不应该包括JSF jar。这些已经是Java EE的一部分,由JBoss AS 7实现。
其次,您绝对不需要也绝对不应该将单独的Facelets jar与JSF 2.x结合使用。Facelets已经是JSF 2.x的一部分。
您也不应该包含JSTL jar。它也是由Java EE/Jboss AS提供的。如果你说的commons jar指的是Apache commons,那么这些是可以的,但是JSF不需要它们。只有当你想要在你的应用程序代码中直接使用它们时,才应该包含它们。
如果您需要这些jar中的任何一个(您不需要,但是假设),如果您刚刚开始使用最新的jar也是最佳实践。从版本号上看,你好像随便取了一个旧版本。但是,你不需要这些罐子。它们由Java EE/JBoss AS 7提供。
My auto-created faces-config xml:
您不需要空的faces-config.xml。如果你刚刚开始,最好把你不需要的东西都去掉。如果以后你需要配置一些东西,你可以随时添加它。
My web xml:
对于JSF,您并不需要将FacesServlet
映射到您所使用的扩展。这些已经是默认值了。如果你省略了整个web.xml,你的Facelets (.xhtml)页面可以通过将.xhtml扩展名更改为.jsf或.faces来请求。例如,如果你的页面是'NewFile.xhtml',你可以使用localhost:8080/NewFile.jsf
或'localhost:8080/NewFile '请求它。
不幸的是,仅 (IMHO)有用的映射不是JSF 2.1默认提供的,因此您需要在web.xml中添加一个映射条目:
<servlet>
<servlet-name>facesServlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
因为您的欢迎页面是NewFile.xhtml
,您需要这个*.xhtml映射,或者您可以完全删除映射并将welcome-file
内容更改为例如NewFile.jsf
。
更新:
如果欢迎页面仍然没有显示,那么在你的项目中一定有什么东西是你不知道的,或者是你没有向我们展示的。
试着从一个非常简单的项目开始,看看它是否有效:
- 在Eclipse中创建一个新的动态Web项目
- 使用项目名称:welcome和目标运行时:JBoss 7.1 runtime 删除WebContent/META-INF和WebContent/WEB-INF/lib
- 从http://arjan-tijms.omnifaces.org/2011/08/minimal-3-tier-java-ee-app-without-any.html复制3个文件到您的项目。之后,你的工作空间应该看起来和图中完全一样。
- 添加WebContent/WEB-INF/web.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<servlet-name>facesServlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>page.xhtml</welcome-file>
</welcome-file-list>
</web-app>
仔细检查你的整个"欢迎"项目中恰好有4个文件,不多也不少。
将项目部署到JBoss AS 7.1。请在Servers视图中右键单击运行时服务器,然后单击"Clean…"启动服务器并请求localhost:8080/welcome
或localhost:8080/welcome/
。
我只是在本地使用相同的步骤进行测试,它工作了。