1

我正在尝试编写自定义表达式语言 (EL) 解析器。这个解析器的目的是拦截对某个 Bean 的方法调用以添加第二个参数。我编写了一个自定义 EL 解析器,它覆盖了invoke-method 来做我想做的事。我还根据需要将解析器放入faces-config.xml

不幸的是,我的项目中有一个依赖项,它还声明了自定义 EL 解析器,它们被放置在解析器链中我的 EL 解析器之前。由于其他解析器之一已经处理了invoke-method,我的自定义invoke-method 永远不会被调用。

有没有办法重新排序解析器,以便首先调用我的解析器?我知道 Apache MyFaces 提供了一种订购解析器的机制,但不幸的是我无法让 MyFaces 在我的项目中工作。

4

1 回答 1

1

将 EL 解析器放在一个单独的web 片段项目中,最终在 webapp 的/WEB-INF/lib. 在 web 片段项目中faces-config.xml,将排序声明为“在其他之前”,如下所示。

<ordering>
    <before>
        <others />
    </before>
</ordering>

或者,如果“其他依赖项”也有faces-config.xml一个已声明的文件<name>,则在排序中显式声明该名称。如果“其他依赖项”恰好也具有上述排序集,这将是唯一的方法。

<ordering>
    <before>
        <name>nameOfThatOtherDependency</name>
    </before>
</ordering>

需要注意的是,这会影响整个faces-config.xml.

于 2016-03-21T20:03:51.957 回答