gpt4 book ai didi

jsf - PrimeFaces 7.0 Ajax 更新警告

转载 作者:行者123 更新时间:2023-12-02 16:51:39 27 4
gpt4 key购买 nike

我收到此警告 org.primefaces.PrimeFaces$Ajax.update 调用了 PrimeFaces.current().ajax().update() 但无法解析组件!表达式将仅添加到 renderIds . 有时在使用 PrimeFaces.current().ajax().update 时我会收到上述警告,搜索我实现了这个解决方案 https://forum.primefaces.org/viewtopic.php?t=58678

public static UIComponent findComponentById(String componentId) {
FacesContext context = FacesContext.getCurrentInstance();
UIViewRoot root = context.getViewRoot();
return root.findComponent(componentId);
}

因此,为了避免收到警告,我执行以下操作:

        if (FacesUtils.findComponentById("pnlEstado") != null) {
PrimeFaces.current().ajax().update("pnlEstado");
}

它起作用了,它不再抛出警告,因为组件始终“可找到”以进行更新。

这里的问题是我的合作伙伴说他不确定这是否是处理警告的最佳方式,因为他认为在生产中执行它需要很多时间,他说是这样的到客户端,然后返回到服务器,然后再返回到客户端,他问这是如何工作的,我真的不知道如何解释,但我认为这是处理它的最佳方式,想知道你对此的看法。

我也尝试过绑定(bind)组件并检查它是否被渲染,但它总是被渲染,所以它总是更新并抛出警告。

所以我删除了绑定(bind)并以这种方式使用。这也只是因为我有 2 个菜单,当 1 个打开时,另一个不显示,所以我认为这就是更新有时会发出警告的原因,但我实现的解决方案解决了这个问题,无论如何我对你的意见持开放态度。

这也是他说他更喜欢我解决问题的方式,我要试试https://forum.primefaces.org/viewtopic.php?t=32040

但我觉得用我想用的那个更好

最佳答案

出现警告是因为给定 ID 的组件无法在当前 ViewRoot 中解析。出于同样的原因,您的 FacesUtils.findComponentById 返回 null。

在 PrimeFaces 中,我们刚刚添加了这个警告来通知用户,要更新的组件可能不存在和/或不会更新。这当然会导致开发人员出现意外行为。

因此,您的 FacesUtils.findComponentById 只是一个 hack,会导致性能下降,因为当组件可用时,“viewRoot.findComponent”将被调用两次。

唯一真正的解决方案是只调用 PrimeFaces.current().ajax().update() 如果您知道组件已呈现。您的 View bean/ Controller 应该知道当前状态。否则就忽略警告。

关于jsf - PrimeFaces 7.0 Ajax 更新警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58434076/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com