栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java

Painfulness

将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/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或更高版本时,请使用

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

注意:使用Servlet 3.0或更高版本时,请使用

http://xmlns.jcp.org
名称空间域,而不要使用
http://java.sun.com
上述XML代码段。

从JSP 2.x到JSP 2.x

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

逐步升级

如果你已经使用后缀

url-pattern
FacesServlet
,喜欢
*.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至Facelets 2.0

如果你将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
    值,例如
    with
    with
    *.xhtml
  • 更新现有Facelet taglib 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">

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

基本上应该是这样。

JSP 2.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>

注意:在使用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")@RequestScopedpublic class SomeBean {}

在旁边

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

@ManagedBean@RequestScopedpublic class SomeBean {}

在此特定示例中,它将为

#{someBean}

任何

<managed-property>
都可以使用来注释
@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 的所有引用。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/378253.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号