jsf 2 - jsf facelets应用程序不能在jboss AS 7中工作



我正在尝试在我的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项目
  1. 使用项目名称:welcome和目标运行时:JBoss 7.1 runtime
  2. 删除WebContent/META-INF和WebContent/WEB-INF/lib
  3. 从http://arjan-tijms.omnifaces.org/2011/08/minimal-3-tier-java-ee-app-without-any.html复制3个文件到您的项目。之后,你的工作空间应该看起来和图中完全一样。
  4. 添加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/welcomelocalhost:8080/welcome/

我只是在本地使用相同的步骤进行测试,它工作了。

相关内容

  • 没有找到相关文章

最新更新