Problema ao criar um duplo clique em um nó da arvore usando primefaces

10 respostas
Diego_Marinho

Olá pessoal,

Quero implementar um duplo clique no nó da arvore e enviar para o campo renderizado.

O problema é o seguinte. Tenho uma pop-up onde é visualizado uma árvore. estou usando o p:tree e p:treenode do primefaces.
O problema é que quando vou expandir o nó da árvore, ao clicar na imagem do “+” fica em loading, pois estou utilizando um a4j:commandLink.
Daí a aplicação não funciona e quebra o javascript do pop-up.

Gostaria de uma alterativa, se tiver, para implementar um duplo clique na árvore.

abaixo segue o meu código:

<rich:popupPanel id="popupDepartamento" width="300" height="350"
		resizeable="false" modal="true"
		onmaskclick="#{rich:component('popupDepartamento')}.hide()">
		<h:form>
			<p:tree id="arvore_departamentos"
				value="#{departamentoSelecionarMB.root}" selectionMode="single"
				var="node" dynamic="true"
				nodeSelectListener="#{departamentoSelecionarMB.departamentoSelecionado}"
				selection="#{node}" update="arvore_departamentos">

				<p:treeNode>
					<a4j:commandLink value="#{node.nome} (#{node.tipoDepartamento.nome})" ondblclick="duploClique()" />
				</p:treeNode>
			</p:tree>

			<a4j:jsFunction name="duploClique" action="#{departamentoSelecionarMB.selecionarDepartamento}"
				render="campo_departamento" oncomplete="#{rich:component('popupDepartamento')}.hide();" execute="@this">
			</a4j:jsFunction>
		</h:form>
	</rich:popupPanel>

OBS:

Notei que funciona normalmente se for assim:

<p:treeNode>
         <h:outputtext value="#{node.nome} (#{node.tipoDepartamento.nome})" />
</p:treeNode>

Sem usar ajax e sem usar o link. ??? muito estranho esse comportamento.
Mas assim não tenho como fazer o comportamento do duplo clique, apenas fica o comportamento padrão da arvore que é: selecionar, expandir e comprimir.

Fico no aguardo e obrigado.
[]´s.

10 Respostas

Rodrigo_Sasaki

você poderia tentar usar o <p:commandLink> ja que a4j é coisa do RichFaces

Diego_Marinho

Olá, já tentei usar desta forma, só que não funciona. Há algum tipo de incompatibilidade.

Mas muito grato pela ajuda.

Rodrigo_Sasaki

O que acontece exatamente? Se for algum JavaScript que está dando problemas, você consegue visualizar na console de erros do Firefox.

Diego_Marinho

O que acontece exatamente? Se for algum JavaScript que está dando problemas, você consegue visualizar na console de erros do Firefox.

Cara, se eu usar o <p:commandLink>, ele não funciona, não mostra meu pop-up.

Rodrigo_Sasaki

Ta, mas e com o a4j?

você disse que fica em loading, mas e aí? ele para no seu método do bean, ou o JavaScript quebra primeiro, ou o ondblclick não está funcionando?

Diego_Marinho

digaoneves:
Ta, mas e com o a4j?

você disse que fica em loading, mas e aí? ele para no seu método do bean, ou o JavaScript quebra primeiro, ou o ondblclick não está funcionando?

ele nao para no seu método do bean, pois quebra antes. Ele fica com o loading em looping, o ondblclick funciona corretamente apenas para o primeiro elemento da árvore, pois como já informei, não consigo expandir os outros elementos da árvore.

Rodrigo_Sasaki

bom.. não sei o que pode ser..

fiz a seguinte tela e tudo funcionou:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:a4j="http://richfaces.org/a4j"
	xmlns:rich="http://richfaces.org/rich"
	xmlns:p="http://primefaces.org/ui">

<h:head>

</h:head>
<h:body>
	<h:panelGrid columns="2" columnClasses="top,top" width="60%">
		<h:form>
			<a4j:commandButton onclick="#{rich:component('popup')}.show()"></a4j:commandButton>

			<rich:popupPanel id="popup" width="300" height="350"
				resizeable="false" modal="true"
				onmaskclick="#{rich:component('popup')}.hide()">

				<p:tree value="#{treeBean.root}" var="node" dynamic="true" cache="true"
					id="tree">
					<p:treeNode>
						<p:commandLink value="#{node}" ondblclick="minhaFuncao()" />
					</p:treeNode>
				</p:tree>
				<a4j:jsFunction name="minhaFuncao" action="#{treeBean.metodo()}"
					oncomplete="#{rich:component('popup')}.hide()" />
			</rich:popupPanel>
		</h:form>
	</h:panelGrid>
</h:body>

</html>
Diego_Marinho
digaoneves:
bom.. não sei o que pode ser.. fiz a seguinte tela e tudo funcionou:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:a4j="http://richfaces.org/a4j"
	xmlns:rich="http://richfaces.org/rich"
	xmlns:p="http://primefaces.org/ui">

<h:head>

</h:head>
<h:body>
	<h:panelGrid columns="2" columnClasses="top,top" width="60%">
		<h:form>
			<a4j:commandButton onclick="#{rich:component('popup')}.show()"></a4j:commandButton>

			<rich:popupPanel id="popup" width="300" height="350"
				resizeable="false" modal="true"
				onmaskclick="#{rich:component('popup')}.hide()">

				<p:tree value="#{treeBean.root}" var="node" dynamic="true" cache="true"
					id="tree">
					<p:treeNode>
						<p:commandLink value="#{node}" ondblclick="minhaFuncao()" />
					</p:treeNode>
				</p:tree>
				<a4j:jsFunction name="minhaFuncao" action="#{treeBean.metodo()}"
					oncomplete="#{rich:component('popup')}.hide()" />
			</rich:popupPanel>
		</h:form>
	</h:panelGrid>
</h:body>

</html>

Cara,

acho que a bronca tá porque eu chamo o meu popup assim:

<p:commandButton id="botao_pesquisar_departamento"
							title="#{messages.bt_pesquisar_departamento}"
							action="#{usuarioEditMB.chamarConsultaDepartamento}"
							update="panel_popup_departamento"
							oncomplete="#{rich:component('popupDepartamento')}.show(); return false;">
							<f:setPropertyActionListener
								target="#{departamentoSelecionarMB.campoRenderizado}"
								value="usuario_departamento, usuario_situacao, usuario_perf" />
						</p:commandButton>
Diego_Marinho

se faço deste jeito que você informou no post anterior, ele não consegue abrir o popup. acho muito estranho isso. tow vendo aki se tem algum conflito de javascript.

Diego_Marinho

Vê aí como fica:

http://www.4shared.com/photo/vJ5t-KR6/Sem_ttulo.html

O estranho é que quando chamo pelo botão e é mostrado o popup, ao clicar no botão “+” para expandir ele fica em looping.

O que seria isso???

Criado 10 de maio de 2012
Ultima resposta 10 de mai. de 2012
Respostas 10
Participantes 2