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!
