我收到此警告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
但我认为与我要使用的那个更好
发生警告是因为当前无法解析给定ID的组件ViewRoot。出于同样的原因,您的FacesUtils.findComponentById返回为null。
在PrimeFaces中,我们只是添加了此警告,以告知用户要更新的组件可能不存在和/或不会被更新。当然,这可能导致开发人员出现意外行为。
因此,您FacesUtils.findComponentById只是一个导致性能下降的技巧,因为当组件可用时,“ viewRoot.findComponent”将被调用两次。
唯一真正的解决方案是仅PrimeFaces.current().ajax().update()在您知道组件已渲染的情况下才调用。您的视图bean /控制器应该知道当前状态。否则,请忽略该警告。
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |