我正在尝试在我的 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。 还有常见的 commons 和 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>
我的网络 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>
提前致谢。
最佳答案
The jars I included for JSF are : jsf-api-2.1, jsf-impl-2.1.0-b03.jar,jsf-facelets-1.1.14.jar. And the usual commons and jstl jars.
这里有很多错误。首先,您不需要,甚至不应该包含 JSF jar。这些已经是 Java EE 的一部分,由 JBoss AS 7 实现。
其次,您绝对不需要也不应该将单独的 Facelets jar 与 JSF 2.x 结合使用。 Facelets 已经是 JSF 2.x 的一部分。
您也不应该包含 JSTL jar。 Java EE/Jboss AS 也提供了这一功能。如果commons jars是指Apache commons,那么这些都很好,但JSF不需要它们。仅当您想直接在应用程序代码中使用它们时才包含它们。
如果您需要这些 jar 中的任何一个(您不需要,但假设),如果您刚刚开始,最好的做法是使用最新的 jar 。从版本号来看,您似乎只是随机使用了旧版本。但同样,您不需要任何这些 jar 。它们由 Java EE/JBoss AS 7 提供。
My auto-created faces-config xml:
您不需要空的 faces-config.xml。如果您刚刚开始,最好删除所有不需要的东西。如果以后需要配置某些内容,您可以随时添加它。
My web xml:
对于 JSF,您实际上并不需要将 FacesServlet
映射到您使用的扩展。这些已经是默认值。如果省略整个 web.xml,则可以通过将 .xhtml 扩展名更改为 .jsf 或 .faces 来请求 Facelets (.xhtml) 页面。例如。如果您的页面是“NewFile.xhtml”,您可以使用 localhost:8080/NewFile.jsf
或“localhost:8080/NewFile.faces”或“localhost:8080/faces/NewFile.xhtml”请求它.
不幸的是,JSF 2.1 默认不提供only(恕我直言)有用的映射,为此,您需要在 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。可以肯定的是,右键单击“服务器” View 中的运行时服务器,然后单击“清理...”启动服务器并请求 localhost:8080/welcome
或 localhost:8080/welcome/
.
我刚刚使用我概述的完全相同的步骤在本地进行了测试,并且它有效。
关于JSF Facelet 应用程序无法在 jboss AS 7 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14044087/