PrimeFaces 2.1 Erro: nodeSelectListener , Tree

Bom dia a todos,

após uma pesquisada ai no google, não obtive ajuda com relação a esse problema, especialmete para aqueles que utilizaram o livro “Java Para Web” da editora Novatec.

A biblioteca primeFaces na versão 2.1 possui uma particularidade que não é mostrada no livro: a função nodeSelectListener retornanull, e vc não consegue debugar o método no bean correspondente.

segue o código:

XHTML:

			<h:form id="arvore">
				<p:tree value="#{categoriaBean.categoriasTree}" var="node" 
				 	dynamic="false"
					selectionMode="single"						
					nodeSelectListener="#{categoriaBean.selecionar}"
					update="edicao" 
					expandAnim="FADE_IN" collapseAnim="FADE_OUT">
					<p:treeNode>
						<h:outputText value="#{node.descricao}"/>
					</p:treeNode>
				</p:tree>
			</h:form>

BEAN:

public void selecionar(NodeSelectEvent event) {
	this.editada = (Categoria) event.getTreeNode().getData();

	Categoria pai = this.editada.getPai();
	if (this.editada != null && pai != null && pai.getCodigo() != null) {
		this.mostraEdicao = true;
	} else {
		this.mostraEdicao = false;
	}
}

porem ao expandir sua arvore vc recebe isso do TomCat:

10/08/2016 09:02:13 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet Faces Servlet threw exception
java.lang.NullPointerException
	at org.primefaces.component.tree.Tree.processUpdates(Tree.java:308)
	at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1113)
	at javax.faces.component.UIViewRoot.processUpdates(UIViewRoot.java:1224)
	at com.sun.faces.lifecycle.UpdateModelValuesPhase.execute(UpdateModelValuesPhase.java:78)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:344)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:110)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:98)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:95)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:79)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:120)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:55)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:36)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:188)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:106)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:150)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at financeiro.web.filter.ConexaoHibernateFilter.doFilter(ConexaoHibernateFilter.java:31)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:662)

E A SOLUÇÃO:

crie a propriedade: selectedNode

private TreeNode selectedNode;

public TreeNode getSelectedNode() {
    return selectedNode;
}

public void setSelectedNode(TreeNode selectedNode) {
    this.selectedNode = selectedNode;
}

e adiciona a tão sonhada ação no xhtml:

			<h:form id="arvore">
				<p:tree value="#{categoriaBean.categoriasTree}" var="node" 
				 	dynamic="false"
					selectionMode="single"
					selection="#{categoriaBean.selectedNode}"
					nodeSelectListener="#{categoriaBean.selecionar}"
					update="edicao" 
					expandAnim="FADE_IN" collapseAnim="FADE_OUT">
					<p:treeNode>
						<h:outputText value="#{node.descricao}"/>
					</p:treeNode>
				</p:tree>
			</h:form>

Agora o nodeSelectListener="#{categoriaBean.selecionar}" vai funcionar…