我如何覆盖 Omnifaces 中的某些 Javascript 函数?

How I can override some Javascript function from Omnifaces?

我想覆盖从 Omnifaces 的 o:highlight 组件调用的 Javascript 函数。我看到 taglib 调用了此处可用的函数 OmniFaces.Highlight

https://github.com/omnifaces/omnifaces/blob/develop/src/main/resources/META-INF/resources/omnifaces/highlight.unminified.js

如何覆盖此函数以使用我自己的实现?

我目前看到的唯一方法是覆盖 Java class org.omnifaces.component.script.Highlight 以调用另一个函数名称。

还有别的方法吗?我不喜欢覆盖所有 class 内容,因为下次我更新 Omnifaces 时,我需要检查 class 是否已更改。

只需在 JavaScript 上下文中重新定义函数即可。

OmniFaces.Highlight.apply = function(clientIds, styleClass, doFocus) {
    // ...
}

您只需确保此函数在加载 omnifaces.js 后定义。您可以通过 <h:body>.

中的 <h:outputScript target="head"> 将脚本包含在函数中来确保这一点
<h:head>
    ...
</h:head>
<h:body>
    <h:outputScript name="yourscript.js" target="head" />
    ...
</h:body>

或者,post issue 给 OmniFaces 人员,让他们实现您想要更改的所需功能。