Problema com rich:tree + drag'n'drop + context menu

Buenas pessoal =)

aqui no sistema da empresa, sempre tivemos uma rich:tree, com um contextmenu, que de acordo com as permissões que o usuário logado tinha no nó da tree, era renderizado diferente.

Ou seja, tinhamos a tree, um contextmenu (que recebia um rerender sempre que um novo nó era selecionado), e ainda o DnD, que possibilita mover um nó da tree para outro, entre outros…

Ok, o problema até então, era que a tree não selecionava o nó com o botão direito. Então, descobrimos o parametro rightClickSelection=“true” da rich:tree, que resolveu este problema…

MAS, gerou mais alguns.

A tree é gerada dinamicamente, e montada na tela do usuario, com switch type ajax (padrão). Depois de ser adicionada essa opção, tivemos que colocar um a4j:support nos nodes da tree, para dar reRender no contextmenu antes de mostrar ele.

Beleza, após isso, o que ocorre é que dependendo das forças aleatórias do universo, as vezes ele perde o id de algum dos nós da trees, geralmente nós que possuem dependencias que são reRenderizadas ao lado.

Exemplo:

Root
-Nó um
–Nó dois (esse tem dependencias que fazem um reRender em um painel lateral)
—Nó três

Eu abro o no um, depois o dois, e o três, e quando fecho o nó dois, o RichFaces me dá um alert bem maneiro, mais ou menos assim:

Navegador é a página .xhtml em que está a tree, form tree é um a4j:form, tree é a tree em si, aí tem o root, nó 0, 0, VAZIO, e o j_id111.

O Engraçado, é que se eu verificar com o Firebug os nós da tree antes de voltar (fechar o nó 2), ele tem ID.

Ou seja, no oncollapse do node, ele fode com o ID.

Alguém já viu algo parecido com isso por aí?

[code]<a4j:region id=“regionTree”>

	<a4j:form id="formTree" ajaxSubmit="true">
	
		<rich:tree id="tree" value="#{meuManaged.tree}" var="node"
			adviseNodeOpened="#{meuManaged.adviseNodeOpenedTreeAreas}"
			adviseNodeSelected="#{meuManaged.adviseNodeSelectedTreeAreas}"
			ajaxSubmitSelection="true" componentState="#{meuManaged.treeAreasState}"
			nodeSelectListener="#{meuManaged.selecionaNode}" nodeFace="#{node.tipo}"
			reRender="panelCaminhoPastaSelecionada, formLista" toggleOnClick="true"
			similarityGroupingId="true" requestDelay="200" rightClickSelection="true" >
			
			<rich:treeNode id="nodeRoot" type="root" icon="#{img.nodeRoot}"
				iconLeaf="#{img.nodeRoot}">
				<h:outputText id="descricaoNoRoot" value="#{node.descricao}" />
				<a4j:support event="oncontextmenu" reRender="menuRoot" oncomplete="contextMenuRoot(event)" />
				<rich:componentControl name="contextMenuRoot" for="menuRoot" operation="show" />
				<rich:dropSupport acceptedTypes="pasta"
					data="#{meuManagedo.mensagemConfirmacao}"
					dropListener="#{meuManaged.processarDropPasta}"
					dropValue="#{node.id}" 
					oncomplete="confirmarMoverPasta(data)"
					reRender="tree, panelCaminhoPastaSelecionada" />
			</rich:treeNode>

			<rich:treeNode id="nodeArea" type="area" icon="#{img.area}"
				dragType="area"
				dragValue="#{node.id}" iconLeaf="#{img.area}">
				<h:outputText id="descricaoNoArea" value="#{node.descricao}" />
				<a4j:support event="oncontextmenu" reRender="menuArea" oncomplete="contextMenuArea(event)" />
				<rich:componentControl name="contextMenuArea" for="menuArea" operation="show" />
				<rich:dropSupport acceptedTypes="area, pasta"
					data="#{meuManaged.mensagemConfirmacao}"
					dropListener="#{meuManaged.processarDropPasta}"
					dropValue="#{node.id}" oncomplete="confirmarMoverPasta(data)"
					reRender="tree, panelCaminhoPastaSelecionada" />
			</rich:treeNode>

			<rich:treeNode id="nodePasta" type="pasta" dragIndicator="indicador"
				dragType="pasta" dragValue="#{node.id}"
				icon="#{img.pasta}" iconLeaf="#{img.pasta}">
				<h:outputText id="descricaoNoPasta" value="#{node.descricao}" />
				<rich:dndParam id="dndParamNodePasta" name="label" value="#{node.descricao}" />
				<a4j:support event="oncontextmenu" reRender="menuPasta" oncomplete="contextMenuPasta(event)" />
				<rich:componentControl name="contextMenuPasta" for="menuPasta" operation="show" />
				<rich:dropSupport acceptedTypes="area, pasta, arquivo"
					data="#{meuManaged.mensagemConfirmacao}"
					dropListener="#{meuManaged.processarDropPasta}"
					dropValue="#{node.id}" oncomplete="confirmarMoverPasta(data)"
					reRender="treeAreas, panelCaminhoPastaSelecionada, listaArquivos" />
			</rich:treeNode>
		</rich:tree>
	</a4j:form>

</a4j:region>[/code]

Alguma idéia?

Obrigado desde já, abraço!