首页 >Java >java教程 >从 JSF 1.2 迁移到 JSF 2.0 面临哪些挑战?这些挑战如何根据所使用的视图技术而变化?

从 JSF 1.2 迁移到 JSF 2.0 面临哪些挑战?这些挑战如何根据所使用的视图技术而变化?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-28 03:08:10648浏览

What are the challenges of migrating from JSF 1.2 to JSF 2.0, and how do these challenges vary depending on the view technology used?

从 JSF 1.2 升级到 JSF 2.0 的痛苦

从 JSF 1.2 升级到 2.0 的痛苦取决于您当前使用的视图技术和未来。这取决于您计划使用的查看技术。

  • JSP 2.x 到 JSP 2.x = 几乎不费力。
  • Facelets 1.x 到 Facelets 2.0 = 更少的工作量。
  • JSP 2.x 到 Facelets 2.0 = 大量工作。如果您有自定义组件,则需要加倍。

基本更改

无论切换视图技术如何,您至少应该执行以下步骤:

  • 从 /WEB-INF/lib(如果存在)中删除 JSF 1.2 JAR。
  • 将 JSF 2.0 JAR 拖放到 /WEB-INF/lib 中(如果 JSF 1.2 由 servlet 容器提供,请设置类以在 servlet 容器的库之前先加载 Web 应用程序库)。策略(另请参见应用程序服务器 JSF2 类加载问题)。
  • 更新 faces-config.xml 中的根声明以匹配 JSF 2.0 规范。
  <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">

注意:如果您使用的是 JSF 2.2 或更高版本,请在上面的 XML 代码段中使用 http://xmlns.jcp 而不是 http://java.sun.com。 .org 命名空间域。

  • 确保 web.xml 中的路由声明至少符合 Servlet 2.5。 JSF 2.0 在 2.4 以下将无法工作(尽管黑客是可能的)。
  <web-app 
      xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
      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_2_5.xsd"
     >

注意:如果您使用的是 Servlet 3.0 或更高版本,请在上面的 XML 代码段中使用 http://xmlns.jcp 而不是 http://java.sun.com。 .org 命名空间域。

JSP 2.x 到 JSP 2.x

如果您使用的是 JSP 2。基本上您不需要更改任何其他内容。 逐步升级

如果您已经在 FacesServlet 中使用后缀 URL 模式(例如

.jsf)并且想要

只使用

,FacesServlet 首先会扫描.xhtml 文件,如果不存在,则为 *.jsp记住扫描文件是个好主意。这允许从 JSP 逐步转换到 Facelets,而无需更改 URL。

但是,如果您使用前缀 URL 模式(例如 /faces/)并希望分阶段从 JSP 升级到 Facelets,请将其更改为 .jsf 并可能替换现有的所有链接JSP页面也必须改变。

请注意,新的 JSF 2.0 提供的隐式导航不会扫描文件是否存在,而是导航到结果.xhtml。因此,如果您从 .jsp 移动到 .jsp,您仍然需要以 JSF 1.x 方式将其包含在视图 ID 中。

Facelets 1.x 到 Facelets 2.0

我使用 Facelets 1.x 作为我的视图技术,Facelets 2.0。如果您想使用它,则需要执行以下附加步骤:

    从 /WEB-INF/lib 中删除 Facelets 1.x JAR。
  • Facelets 1.x 从 faces-config.xml 中删除 FaceletViewHandler。
  • 如果您有自定义 FaceletViewHandler 实现,则必须更新它以扩展 ViewHandlerWrapper。
  • 尽管没有必要,但出于清理目的,请从 web.xml 中删除 Facelets 1.x 相关的 值(例如, javax.faces.DEFAULT_SUFFIX 值为 *.xhtml)。这已经是 Facelets 2.0 中的默认设置。
  • 将现有 Facelet 标签库 XML 的根声明更新为兼容 Facelet 2.0。
  <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">
注意:如果您使用的是 JSF 2.2 或更高版本,请在上面的 XML 代码段中使用 http://xmlns.jcp 而不是 http://java.sun.com。 .org 命名空间域。

这些基本就够了。

JSP 2.x 到 Facelets 2.0

我们正在使用

JSP 2.x 作为我们的视图技术,并将很快升级到 Facelets 2.0 如果如果您愿意,您必须在发布网站之前进行大量更改。我们基本上改变了这里的视图技术。

母版页修改

必须在所有母版页中修改以下基本 JSP 模板。

  <web-app 
      xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
      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_2_5.xsd"
     >
更改为以下基本 Facelets 模板。

  <facelet-taglib 
      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-facelettaglibrary_2_0.xsd"
      version="2.0">
注意:如果您使用的是 JSF 2.2 或更高版本,请在上面的 XHTML 代码段中使用 http://xmlns.jcp.org 名称而不是 http://java.sun.com。空间域。

包含页面更改

如果您现有的 JSP 页面设计良好,则不会有 scriptlet 行代码,唯一的 JSP 特定标记将是

jsp 应该只有是:包括>它们应该从:
  <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">

更改如下。
  <web-app 
      xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
      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_2_5.xsd"
     >

基本 JSP 包含页面模板...
  <facelet-taglib 
      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-facelettaglibrary_2_0.xsd"
      version="2.0">

...必须更改为以下基本 Facelets 包含页面模板。
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE html>
<f:view>
    <html lang="en">
        <head>
            <title>JSP page</title>
        </head>
        <body>
            <h:outputText value="JSF components here." />
        </body>
    </html>
</f:view>

以上是从 JSF 1.2 迁移到 JSF 2.0 面临哪些挑战?这些挑战如何根据所使用的视图技术而变化?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn