【问题标题】:migrating to facelets 2.0 from facelets 1.x从 facelets 1.x 迁移到 facelets 2.0
【发布时间】:2012-04-03 17:41:54
【问题描述】:

我正在使用 JSF 2.0 构建一个 Web 应用程序,并且在我的 WEB-INF > lib 文件夹中有一个 jaf-facelets.1.1.10 jar,所以现在我正在尝试删除它,以便我可以使用内置的 int facelets 2.0 我正在阅读this Question which balusC answered,我已经完成了,除了它说我需要用 ViewHandlerWrapper 替换 FaceletViewHandler 的部分。为此,我看到了 this question,但我的项目中没有任何 faceletViewhandler 类。

到目前为止,我的 webxml 看起来像这样(请检查我没有遗漏任何内容,或者我引用了我不应该引用的内容:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>miloWeb</display-name>
  <welcome-file-list>
    <welcome-file>faces/pages/index.xhtml</welcome-file>
  </welcome-file-list>
  <listener>
    <listener-class>com.bravo.listeners.ServletListener</listener-class>
  </listener>
  <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>/faces/*</url-pattern>
  </servlet-mapping>
  <servlet>
        <servlet-name>PdfServlet</servlet-name>
        <servlet-class>com.bravo.servlets.PdfServlet</servlet-class>
    </servlet>    
    <servlet-mapping>
        <servlet-name>PdfServlet</servlet-name>
        <url-pattern>/PdfServlet</url-pattern>
    </servlet-mapping>
  <filter>
       <filter-name>MyFacesExtensionsFilter</filter-name>
       <filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
  </filter> 
  <filter-mapping>
       <filter-name>MyFacesExtensionsFilter</filter-name>
       <servlet-name>Faces Servlet</servlet-name> 
  </filter-mapping>
  <context-param>
    <description>
      This is to Have separated faces.config files            
    </description>
    <param-name>javax.faces.CONFIG_FILES</param-name>
    <param-value>
      /pages/history/faces-config.xml,
      /pages/contactInformation/faces-config.xml,
      /pages/childHealthRecord/faces-config.xml,
      /pages/dashboard/faces-config.xml,
      /pages/insurance/faces-config.xml,
      /pages/search/faces-config.xml,
      /pages/labs/faces-config.xml,
      /pages/patient/faces-config.xml,
      /pages/physical/faces-config.xml,
      /pages/notes/faces-config.xml,
      /pages/scheduler/faces-config.xml,
      /pages/settings/faces-config.xml,
      /pages/orderEntry/faces-config.xml,
      /pages/vitals/faces-config.xml
    </param-value>
  </context-param>
  <context-param>
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
  </context-param>
  <context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>resources.application</param-value>
  </context-param>
</web-app>

如你所见,我删除了很多faces-configs

<application>
        <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
    </application>

现在它看起来像这样(我知道一些我不需要的功能,比如导航,但是保持不变真的很痛苦吗?):

<?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">

    <managed-bean>
        <managed-bean-name>vitalsBB</managed-bean-name>
        <managed-bean-class>com.bravo.vitals.VitalsBB</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
    <navigation-rule>
        <navigation-case>
            <from-outcome>vitals</from-outcome>     
            <to-view-id>/pages/vitals/vitals.xhtml</to-view-id>
            <redirect />
        </navigation-case>
    </navigation-rule>

</faces-config>

在做了一些更改并保留它之后,我在 tomcatv7 上运行该项目并得到这个 错误

java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config
    com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:452)
    com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:140)
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
    org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:349)

如果我的文件是这样的,这看起来像是一个错误吗?因为我所做的只是删除了 jar-facelets.1.1.10.jar,现在我得到了这个错误。但是应用程序运行良好 b4 我删除了 facelets jar,那么这两个 jar 之间是什么关系??

我尝试添加 jstl.jar 但这不起作用,它只是向我显示:

【问题讨论】:

    标签: java xml jsf-2 facelets


    【解决方案1】:

    错误建议在您的 jsf jar 所在的同一文件夹中包含 jstl-1.2.jar available here

    不再需要 facelets 2.0 jar,因为 JSF 2.0 采用 facelets 作为其默认的视图声明语言 (VDL),现在它被捆绑在 jsf jars 中(MyFaces 和 Mojarra 都适用)

    【讨论】:

    • 我添加了jar,但是很奇怪它之前没有抱怨。我添加了它,现在当我尝试在服务器上运行它时,(它试图打开 index.xhtml)并出现一个弹出窗口,询问我是否要打开文件或保存它?我以前从来没有得到过这个
    【解决方案2】:

    为了解决这个问题,我不得不添加 jstl-impl.jar 和 jstl-api.jar 并更新到最新的 jsf-impl.jar 和 jsf-api.jar。那解决了它。

    真的不知道为什么当 facelets.1.10.jar 在那里时它从来没有抱怨过。

    【讨论】:

    • 你的 webapp 中不应该有 JSP API/impl!应该由 servletcontainer 本身来提供它。您的 Web 应用程序现在是不可移植的,并且只能在与这些 JSP 库的来源相同的 servletcontainer make/version 中工作。
    • 嗯?那么我必须删除它们吗?还是你告诉我它无法修复? :(
    • stackoverflow.com/questions/4441713/… 你告诉我们将 jsf 2.0 jar 放到我们的 WEB_INF 中,因为它有效,我认为它是正确的......我现在该怎么办?
    • 天啊,对不起。我的意思是说我将 jsf-impl.jar 和 jsf-api.jar 添加到我的 WEB_INF 中。我在输入jsp时搞砸了。我会编辑我的答案。我那里没有任何jsp jar。我好吗?
    • 只是想和你确认一下。谢谢
    猜你喜欢
    • 1970-01-01
    • 2010-12-28
    • 2012-05-20
    • 2011-03-28
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 2012-04-19
    相关资源
    最近更新 更多