我正在尝试下面的代码
public String collapseTreeById(ActionEvent event) throws IOException {
String treeId = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("treeId");
UITree tree = (UITree)event.getComponent().findComponent(treeId);
tree.getParent().getChildren().clear();
return null;
}
在这里你可以检查我已经删除了所有的子组件和这个方法调用如下
<a4j:commandLink actionListener="#{inventoriesBean.collapseTreeById}"
value="collapse" render="treeServType">
<f:param value="treeServType" name="treeId" />
</a4j:commandLink>
,也添加了render
,但我仍然看到树处于相同的状态(从以前的状态没有变化),而不是再次创建。如果渲染不创建组件和更新模型值,那么甚至树的状态应该改变?这也没有发生。
为什么?
Render生成HTML片段并将它们发送给客户端,因为您已经删除了树,所以它不会发回任何内容。如果你想让它工作,你必须把树包装在另一个组件中,并渲染那个组件。
另一方面,清空子列表实际上没有做任何事情(也不应该这样做),组件树是为每个请求重新创建的。