从JSF1.2迁移到JSF2.0

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

我正在使用一个相当大的应用程序JSF 1.2,注意到自定义标记中的一些属性已经更改等等。

提问于
用户回答回答于

将JSF1.2升级到2.0的痛苦程度取决于目前正在使用的视图技术以及您想要使用的视图技术。

  • JSP2.x到JSP2.x=几乎毫不费力。
  • Facelets 1.x到Facelets 2.0=很少的努力。
  • JSP2.xtoFacples2.0=很大的努力。如果您也有自定义组件,则加倍。

基本变化

不管视图技术的切换,至少应采取以下步骤:

  • /WEB-INF/lib(如有的话)。
  • 放下JSF2.0 JAR/WEB-INF/lib
  • 更新根声明faces-config.xml以符合JSF2.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">
  • 确保web.xml已遵守至少Servlet 2.5。JSF2.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" id="YourWebappID" version="2.5">

JSP 2.x到JSP 2.x

如果你用JSP 2.x想要守住使用它,基本上就不需要改变任何其他东西了。

逐步升级

如果已经使用了后缀url-patternFacesServlet,就像*.jsf,很高兴知道FacesServlet先扫描*.xhtml文件,如果不存在,则扫描*.jsp档案。这为您在不更改URL的情况下从JSP逐步转换为Facelets提供了空间。

但如果你用的是前缀url-pattern,就像/faces/*希望逐步从JSP升级到Facelets,然后必须将它更改为*.jsf也可能是现有JSP页面中的所有链接。

Fac激光束1.x到Fac激光束2.0

如果你用Facelets 1.x作为视图技术,并希望使用提供的JSF2.0Facelets 2.0,则需要执行以下附加步骤:

  • /WEB-INF/lib...
  • 移除Facelets 1.xFaceletViewHandlerfaces-config.xml.
  • 任何习俗FaceletViewHandler需要更新实现以扩展。
  • 没有必要,但只是为了清理,删除与Facelets 1.x相关的任何内容<context-param>web.xml它们已经是Facelets 2.0中的缺省值,如javax.faces.DEFAULT_SUFFIX有价值的*.xhtml.
  • 更新现有Faclettaglib XML的根声明,以符合Facelets 2.0的要求。<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">

JSP2.x到Facelets 2.0

如果你用JSP 2.x作为视图技术,您希望升级到Facelets 2.0立即,然后你需要做很多改变,然后网站才能上线。你基本上改变了这里的视图技术。

母版页更改

在每个母版页上,您需要更改以下基本JSP模板。

<%@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>

到以下基本Facelets模板:

<!DOCTYPE html>
<html lang="en"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
        <title>XHTML page</title>
    </h:head>
    <h:body>
        <h:outputText value="JSF components here." />
    </h:body>  
</html>

包括页面更改

如果现有的JSP页面设计良好,则不应使用脚本代码,还应该只有<jsp:include>作为唯一的特定于JSP的标记。其中任何一项都需要从以下几个方面加以改变:

<jsp:include page="include.jsp" />

<ui:include src="include.xhtml" />

基本JSP包括页面模板.

<%@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"%>
<f:subview id="include">
    <h:outputText value="JSF components here." />
</f:subview>

应该将更改为以下基本Facelets,包括页面模板:

<ui:composition
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:outputText value="JSF components here." />
</ui:composition>

@ManagedBean(name="managedBeanName")
@RequestScoped
public class SomeBean {}

用户回答回答于

需要提到的一点是,如果有人在JSF 1.2中使用JSTL,那么在升级到JSF 2时,应该将名称空间更改

扫码关注云+社区