我收到此警告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);
}
Run Code Online (Sandbox Code Playgroud)
因此,为了避免收到警告,请执行以下操作:
if (FacesUtils.findComponentById("pnlEstado") != null) {
PrimeFaces.current().ajax().update("pnlEstado");
}
Run Code Online (Sandbox Code Playgroud)
而且它的工作原理是,它不再发出警告,因为组件始终可以“找到”进行更新。
这里的问题是我的搭档说他不确定这是否是处理警告的最佳方法,因为他认为在生产过程中要花很多时间才能执行警告,他说这样会交给客户回到服务器,然后又返回给客户,这是如何工作的,他问,我真的不知道该怎么解释,但问题是我认为这是处理它的最佳方法,想了解您对此的看法。
我也尝试过绑定组件,并检查它是否已渲染,但是渲染它始终是真实的,因此它总是更新并引发警告。
因此,我删除了绑定并使用了这种方式。同样这只会发生是因为我有2个菜单,当打开1个菜单时没有显示另一个菜单,因此我认为这就是为什么有时会引发警告,但是我实施的解决方案可以解决这个问题,无论如何我都会接受您的意见。
这也是他说他希望我解决它的方式,我要尝试一下https://forum.primefaces.org/viewtopic.php?t=32040
但我认为与我要使用的那个更好
我可以在那里发生哪些可能的事件?谢谢你 :)
<p:inputText>
<p:ajax event="" />
</p:inputText>
Run Code Online (Sandbox Code Playgroud)
尝试查看<p:ajax> 事件列表,但文档没有列出每个组件的可能事件:p