0

我正在为 OCEJWCD 做准备。我来acorsed这个问题。而且不知道答案是什么。我认为正确的答案是无法预测顺序。这是错的。有人可以帮我理解吗,

问:在一个应用程序中有三个 web-fragment.xml。下面给出。将按什么顺序解析这些描述符。鉴于 web.xml 中没有绝对排序。

网页片段 A

<web-fragment>
<name>A</name>
<ordering>
    <before>
        <others/>
        <name>B</name>
    </before>
</ordering>

网页片段 B:

<web-fragment>
<name>B</name>
<ordering>
    <before>
        <others/>
        <name>C</name>
    </before>
</ordering>

网页片段 C:

<web-fragment>
<name>C</name>
<ordering>
    <before>
        <others/>
    </before>
</ordering>

提前致谢。

4

1 回答 1

1

从规格

<before> 表示文档必须排在与嵌套 <name> 元素中指定的名称匹配的文档之前。

有一个特殊的元素 <others/> 可以在 <before> 或 <after> 元素中包含零次或一次,或者在 <absolute-ordering> 元素中直接包含零次或一次。<others/> 元素必须按如下方式处理。

如果 <before> 元素包含嵌套的 <others/>,文档将被移动到已排序文档列表的开头。如果有多个文档声明<before><others/>,它们都将位于排序文档列表的开头,但未指定此类文档组内的顺序。

这清楚地表明 A、B 和 C 之间的顺序不是确定性的。

但是还有这个部分

在 <before> 或 <after> 元素中,如果存在 <others/> 元素, 但它不是其父元素中唯一的 <name> 元素,则必须在排序过程中考虑该父元素中的其他元素。

现在 A 和 B 都属于这一类,它们的 web 片段除了 <others/> 之外还有一个 <name> 元素。在这种情况下,规范说在订购过程中必须考虑其他元素。所以 A 应该在 B 之前,B 应该在 C 之前。瞧,它现在是确定性的,顺序是

  1. 一个
  2. C

为了测试,我们可以编写 3 个过滤器并在每个 web 片段中定义一个,并检查加载顺序。

于 2017-02-28T07:44:12.860 回答