使用findComponent方法获取Null?

时间:2015-07-16 14:39:54

标签: jsf jsf-2

这是我添加的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

的ID

1 个答案:

答案 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); 
// ...