这是我添加的Java代码
public void collapseTreeById(ActionEvent event) throws IOException {
String treeId = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("treeId");
UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot();
UITree tree = (UITree)viewRoot.findComponent(treeId);
tree.setToggleType(SwitchType.server);;
}
和Jsf页面更改
<a4j:commandLink actionListener="#{inventoriesBean.collapseTreeById}"
value="collapse" render="treeServType">
<f:param value="treeServType" name="treeId" />
</a4j:commandLink>
但我在这一行UITree tree = (UITree)viewRoot.findComponent(treeId);
此处treeServType
是树
答案 0 :(得分:1)
然后,这只是意味着组件树中不存在给定findComponent
search expression的组件。您似乎已经传递了唯一的组件ID,并且您正在UIViewRoot
(组件树的根)中搜索。如果目标组件本身实际位于NamingContainer
组件内,例如<h:form>
,则会失败。
如果您不想或不想更改findComponent
搜索表达式以表示绝对组件ID,例如formId:treeId
,则它具有相同的NamingContainer
parent作为该命令链接,那么您应该通过该命名容器父进行搜索。
String treeId = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("treeId");
UIComponent namingContainerParent = event.getComponent().getNamingContainer();
UITree tree = (UITree) namingContainerParent.findComponent(treeId);
// ...