程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Java-从JSF 1.2迁移到JSF 2.0大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Java-从JSF 1.2迁移到JSF 2.0?

开发过程中遇到Java-从JSF 1.2迁移到JSF 2.0的问题如何解决?下面主要结合日常开发的经验,给出你关于Java-从JSF 1.2迁移到JSF 2.0的解决方法建议,希望对你解决Java-从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是servletcontainer提供的,则你可能需要更改类加载策略,以在servletcontainer库之前首先加载webapp库,另请参见应用程序服务器中的JsF2类加载问题)。
  • 更新根声明faces-config.xml以符合JsF 2.0规范。
<faces-config
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLscheR_571_11845@a-instance"
    xsi:scheR_571_11845@aLOCATIOn="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或更高版本时,请使用http://xmlns.jcp.org名称空间域,而不要使用http://java.sun.com上述XML代码段。

  • 确保的根声明至少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/XMLscheR_571_11845@a-instance" 
    xsi:scheR_571_11845@aLOCATIOn="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    ID="YourWebappID"
    version="2.5">

注意:使用Servlet 3.0或更高版本时,请使用http://xmlns.jcp.org名称空间域,而不要使用http://java.sun.com上述XML代码段。

如果你正在使用JsP 2.x并希望继续使用它,那么你基本上不需要更改任何其他内容。

如果你已经使用后缀url-patternFacesServlet,喜欢*.Jsf的话,那是很好的知道,FacesServlet会先扫描*.xhtml文件,如果它不存在,然后扫描*.Jsp文件。这为你提供了在不更改URL的情况下逐步从JsP逐步转换为Facelets的空间。

但是,如果你使用的是url-pattern诸如这样的前缀,/faces/*并且你希望逐步从JsP升级到Facelets,那么你实际上必须将其更改*.Jsf为现有的JsP页面中的所有链接。

你只需要记住,新的JsF 2.0提供的隐式导航不会扫描文件的存在,outcome.xhtml无论如何它都会进入。因此,如果你想来自或前往*.Jsp,则仍需要以JsF 1.x方式将其包含在vIEwID中。

如果你将Facelets 1.x用作视图技术,并且想要使用JsF 2.0提供的Facelets 2.0,那么你需要执行以下附加步骤:

  • 从中删除Facelets 1.x JAR /WEB-INF/lib
  • FaceletVIEwHandler从中删除Facelets1.x faces-config.xml
  • 任何自定义FaceletVIEwHandler实现都需要更新以扩展VIEwHandlerWrapper。
  • 并非必须,但仅出于清理目的,请删除所有与Facelets 1.x相关的<context-param>值,web.xml这些值在Facelets 2.0中已经是默认javax.faces.DEFAulT_SUFFIX值,例如withwith*.xhtml
  • 更新现有Facelet taglib XML的根声明以符合Facelets 2.0。
<facelet-taglib 
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLscheR_571_11845@a-instance"
    xsi:scheR_571_11845@aLOCATIOn="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或更高版本时,请使用http://xmlns.jcp.org名称空间域,而不要使用http://java.sun.com上述XML代码段。

基本上应该是这样。

如果你将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>

注意:在使用JsF 2.2或更高版本时,请使用http://xmlns.jcp.org名称空间域,而不要使用http://java.sun.com上述XHTML代码段。

如果你现有的JsP页面设计良好,则你不应有任何一行scriptlet代码,并且也应仅将用作唯一的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>

注意:在使用JsF 2.2或更高版本时,请使用http://xmlns.jcp.org名称空间域,而不要使用http://java.sun.com上述XHTML代码段。

自定义组件更改 你需要按照本Mojarra迁移指南中的说明将JsP TLD文件更改为Facelets TLD文件。

后果 无论采用哪种迁移方法,你都可以faces-config.xml通过新的JsF 2.0注释甚至CDI逐渐消除。任何<managed-bean>都可以通过@managedBean以下方式注释:

@managedBean(name="managedBeAnname")
@requestScoped
public class SomeBean {}

在旁边@requestScoped,还有@VIEwScoped,@SessionScoped并且@ApplicationScoped可用。如果你省略的name属性@managedBean,则它将默认为类名,其中第一个字符为小写。

@managedBean
@requestScoped
public class SomeBean {}

在此特定示例中,它将#{someBean}

任何<@R_212_1403@>都可以使用来注释@managedProperty

@managedProperty("#{otherBean}")
private OtherBean otherBean;

任何<valIDator>都可以使用来注释@FacesValIDator

@FacesValIDator("someValIDator")
public class SomeValIDator implements ValIDator {}

任何<converter>都可以使用注释@FacesConverter

@FacesConverter("someConverter")
public class someConverter implements Converter {}

任何<renderer>都可以使用注释@FacesRenderer

@FacesRenderer(componentFamily="someComponentFamily", rendererType="someRendererType")
public class SomeRenderer extends Renderer {}

任何<navigation-case>它使用Xhtml页面的文件名既<from-outcome><to-vIEw-ID>可以被删除,因为这将是隐式进行。通过更改所有结果值以匹配目标视图的文件名,可以逐步完成此操作。

最终,可以更好地标记在会话中放入的所有会话范围的Bean,其唯一原因是将Bean数据保留在同一选项卡/窗口中的后续请求中@VIEwScoped,因为这样一来,当最终用户打开时,不会影响Bean不同标签/窗口中的同一页面。

请注意,在此答案中我没有虑任何第三方组件库,例如PrimeFaces / RichFaces / IceFaces,因此不可能编写出可靠的答案,因为它基本上可以归结为“取决于”。通常,只需按照其说明将组件库升级到-一个经过验证的JsF 2.0兼容版本即可。最好的办法就是编写单元测试,在升级之前和之后运行它们,并分别修复所有问题。

这里至少是一些有关特定组件库迁移的有用链接:

  • RichFaces迁移指南-从3.3.x到4.x的迁移
  • IceFaces 2 Wiki-IceFaces 1.x兼容性指南

PrimeFaces还没有从PrimeFaces 1.x到2.x的迁移指南,因为PrimeFaces 1.x已经需要Facelets 1.x,因此你只需遵循Facelets 1.x到2.x的迁移步骤。但是,有一个PrimeFaces 2.x到3.x(及更高版本)的迁移指南,也可能适用于从PrimeFaces 1.x到3.x(或更高版本)的迁移。战斧也没有迁移指南。基本上,唯一需要更改的是JAR,并在必要时<t:saveState>通过使bean视图成为作用域来摆脱对请求范围的bean 的所有引用。

解决方法

我正在使用JSF 1.2编写的大型应用程序。JSF 1.2大约已有6年历史了。我需要升级到JSF 2.0。这将有多痛苦?我注意到自定义标签中的某些属性已更改等。

大佬总结

以上是大佬教程为你收集整理的Java-从JSF 1.2迁移到JSF 2.0全部内容,希望文章能够帮你解决Java-从JSF 1.2迁移到JSF 2.0所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。