【发布时间】:2019-10-17 13:40:24
【问题描述】:
我收到此警告org.primefaces.PrimeFaces$Ajax.update PrimeFaces.current().ajax().update() called but component can't be resolved!Expression will just be added to the 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");
}
而且它有效,它不再抛出警告,因为组件总是“可找到”进行更新。
这里的问题是我的伙伴说他不确定这是否是处理警告的最佳方式,因为他认为在生产中执行它需要很长时间,他说这样到客户端,然后返回到服务器,然后再次返回到客户端,他问这是如何工作的,我真的不知道如何解释,但问题是我认为这是处理它的最佳方式,想知道您对此的看法。
我也尝试了绑定组件并检查它是否被渲染,但它总是被渲染,所以它总是更新并抛出警告。
所以我删除了绑定并以这种方式使用。这也只是因为我有 2 个菜单,当 1 个打开时另一个没有显示,所以我认为这就是为什么更新有时会引发警告,但我实施的解决方案解决了它,无论如何我对你的意见持开放态度。
这也是他说他喜欢我解决它的方式,我会试试https://forum.primefaces.org/viewtopic.php?t=32040
但我觉得用我想用的那个更好
【问题讨论】:
-
你检查客户端这个组件的 ID 是什么?您是否尝试一起删除更新?应用程序还在工作吗?
-
@Kukeltje 我会尝试一起删除更新,它是包含面板的整个表单的 id,我会检查会发生什么
-
@Kukeltje 如果我删除更新,菜单将不会显示,并且用户的“现金金额”也不会显示在菜单顶部并不断更新,我需要它们 = /,但请看我与tandraschko的讨论,认为我将不得不等待7.1版本,同时我将使用我的问题的解决方案:)
标签: jsf primefaces