Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf RichFaces 3到RichFaces 4迁移_Jsf_Richfaces - Fatal编程技术网

Jsf RichFaces 3到RichFaces 4迁移

Jsf RichFaces 3到RichFaces 4迁移,jsf,richfaces,Jsf,Richfaces,我目前正在做一个项目,我想从版本3.3.3.Final迁移到RichFaces 4。我在想 在移民之前,我应该考虑、知道或思考什么重大问题吗 (可能是个愚蠢的问题,但是…)你能把richfaces 3和richfaces 4“混合”起来吗 我想切换的一个主要原因是使用richfaces 4 autocomplete,有没有一种方法可以使用richfaces 3这样做,或者迁移是最简单的 我正在使用JSF 在移民之前,我应该考虑、知道或思考什么重大问题吗 他们的建议是遵循他们自己的-这似乎还远

我目前正在做一个项目,我想从版本3.3.3.Final迁移到RichFaces 4。我在想

  • 在移民之前,我应该考虑、知道或思考什么重大问题吗

  • (可能是个愚蠢的问题,但是…)你能把richfaces 3和richfaces 4“混合”起来吗

我想切换的一个主要原因是使用richfaces 4 autocomplete,有没有一种方法可以使用richfaces 3这样做,或者迁移是最简单的

我正在使用JSF

在移民之前,我应该考虑、知道或思考什么重大问题吗

他们的建议是遵循他们自己的-这似乎还远远不够完整,请参阅真实体验


(可能是个愚蠢的问题,但是…)你能把richfaces 3和richfaces 4“混合”起来吗


不,你不能。它会与自身发生冲突。

TLDR:RichFaces在2016年6月迎来了一个值得纪念的生命终结。这是一个管理不善的项目灾难,不应该有更好的结果

这里要注意的是,官方移民指南的完成率不超过30%。作为衡量标准,我在2011年根据迁移指南编写了一个378行的XSLT样式表。然后,我将该项目搁置到2015年6月,根据进一步的调查并使其正常运行,该项目已达到1090条线路。请记住,任何XSLT样式表都有一些开销,378/1090=35%

完成迁移指南中的说明后:

  • 打开相邻浏览器选项卡中使用的每个组件的TLD/VLD生成文档,每个版本一个,并仔细比较。在属性名称和用途方面有几十个未记录的更改,一些属性已从父容器移动到子容器

  • 还有一些重要的内容刚刚被任意删除,例如
    rich:page
    rich:layout.

    我将提供一份清单,列出我在本文末尾发现的一些额外的东西

  • 然后,您将面临一个令人不快的认识,即他们还更改了大量自己的样式类名,因此,如果您已经为自己的样式表中的任何样式定义了样式,那么您还有更多的工作要做

  • 您还将发现,他们声称您可以定义自己的样式类并在富组件中指定它们来实现自己的样式,这完全是不真实的。样式类是在包含级别应用的,但在许多情况下,例如它们认为适合在表格单元格级别定义字体的表格单元格,在表格单元格级别,可以覆盖它们的唯一方法是按名称重新定义其单元格样式

  • 您还必须确保样式表包含在RichFaces之后。在3.3中,这是自动的,因为首先包括了他们的。它们现在包含在最后,因此您必须使用
    h:outputStylesheet
    并尽可能晚地执行此操作,以确保随后生成它

  • 我使用XSLT转换实现了迁移指南,并完成了上面的1-2。它目前有1000多行,我还没有完成。为什么他们自己不能提供这样的东西对我来说是个谜

    为什么有必要在3版和4版之间进行如此重大的更改,这是另一个更深层次的谜团。这是一个管理非常糟糕的产品。我不会再迁移它,也不会重新部署它

    编辑我发现的未记录的更改(为简洁起见,使用XPath语法):

    • a4j:状态

    • 文档在这一点上是模糊的,但是
      for=
      属性已被删除:它现在默认在最近的父
      a4j:region
      中运行,除非通过
      status=
      属性与特定小部件有关联。因此,如果在同一区域内有多个目标,它们将全部开火

    • 如果您想通过
      status=
      将其应用于特定小部件,则必须将相应的
      a4j:status/@id
      更改为
      @name
      属性

    • 修复所有这些后,它仍然不起作用:

      • 带有
        @for
        (已删除)属性的
        a4j:status
        不会停止
      • 使用
        @name
        属性和no
        @id
        不会做任何事情
      • 而且无论是
        @name
        还是
        @id
        都不会停止
    • rich:column/@breakBefore

      现在
      breakRowBefore

    • rich:page

      删除

    • rich:layout

      删除

    • rich:column/@sortOrder

      现在必须是小写

    • rich:下拉菜单/@value

      现在
      rich:下拉菜单/@label

    • rich:dropDownMenu/@direction
      rich:dropDownMenu/@jointPoint

      这些值已分别从
      {top left,top right,bottom left,bottom right}
      {tl,tr,bl,br}
      更改为
      {top left,top right,bottomLeft,bottomRight}

    • rich:contextMenu/@submitMode
      rich:dropDownMenu/@submitMode
      rich:menuItem/@submitMode

      现在这些都是富的:/@mode,值
      “none”
      需要更改为
      “client”

    • rich:isUserInRole

      对于Mojarra 2.2.08和EL 2.2来说,这已经不再起作用了,至少对我来说是这样。幸运的是,使用EL2.2,您不再需要它,可以使用
      request.isUserInRole(…)

    • rich:menuGroup/@value

      现在
      rich:menuGroup/@label

    • rich:tab/@label

      现在
      ric
      
        <rich:tree>
            <rich:treeNodesAdapter var="vm_host">
                <rich:treeNode .../>
                <rich:treeNodesAdapter var="vm_guest">
                    <rich:treeNode .../>
                </rich:treeNodesAdapter>
            </rich:treeNodesAdapter>
        </rich:tree>
      
        <rich:tree ... var="node"> <!-- Add a 'var' attribute -->
            <rich:treeModelAdapter>
                <c:set var="vm_host" value="#{node}"/>
                <rich:treeNode .../>
                <rich:treeModelAdapter>
                    <c:set var="vm_guest" value="#{node}"/>
                    <rich:treeNode .../>
                </rich:treeModelAdapter>
            </rich:treeModelAdapter>
        </rich:tree>