Render属性是否会再次创建组件或仅更新模型?

时间:2015-07-22 13:13:51

标签: jsf jsf-2 richfaces

我正在尝试下面的代码

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但是我仍然看到树处于相同的状态(与之前的状态没有变化)并且没有再次创建。如果渲染不再创建组件并更新模型值,那么甚至树状态应该更改?它也没有发生。

为什么?

1 个答案:

答案 0 :(得分:0)

渲染生成HTML片段并将其发送到客户端,因为您已删除了它不会发回任何内容的树。如果您希望它工作,您必须将树包装在另一个组件中并重新呈现该组件。

另一方面,清空子项列表并没有真正做任何事情(你不应该这样做),每次请求都会重新创建组件树。