[RESOLVIDO]Link dentro do rich:dataTable não funciona porque?

22 respostas
rapha.java

Bom Dia,
Já vi em alguns casos que muitos estão com problemas em usar um commandlink dentro do Datatable.
Então queria saber porque isto ocorre? Tenho um rich:datatable que lista alguns produtos, e um dos campos é um link chamado "detalhe", que ao ser clicado deveria chamar um metodo e mudar de página, mas esse link não faz absolutamente nada! Testei fora do datatable e não funcionou, procurei em varios sites (richfaces demo, outros foruns e aqui) mas só descobri que não funciona, mas como corrigir isto ?

Estou usando JSF 2.0

<rich:dataTable id="tableResult" var="result" border="1" width="100%"
			value="#{andamento.informacoes}">
......
<rich:column>
				<f:facet name="header">
					<h:outputText value="Detalhe" />
				</f:facet>
				<a4j:commandLink action="#{detalhe.carregarDetalhes}"
					value="#{result.detalhe }" id="cotacao">
				</a4j:commandLink>
			</rich:column>

Todas as configurações estão corretas !

22 Respostas

Hebert_Coelho

Ou seja, seu link não está funcionando de jeito nenhum? A chamada está sendo feita via ajax? Se sim, tente fazer sem ajax.

rapha.java

Ou seja, seu link não está funcionando de jeito nenhum? A chamada está sendo feita via ajax? Se sim, tente fazer sem ajax.

Testei sem e com ajax! Fora e dentro do datatable !

Diguinho.Max

Amigo poste a parte do codigo que contem o metodo para podermos entender o que vc está retornando!

sempre uso link em datatable e até agora nao tive problemas!

A

Opa, boa tarde.

O link não funciona nem dentro nem fora da tabela ?

o link está dentro de um form ?

[]'s

Hebert_Coelho

Além de postar parte do datatable, poste também o método chamado.

Por falar nisso, esse método retorna uma string né? O.o

rapha.java
Diguinho.Max:
Amigo poste a parte do codigo que contem o metodo para podermos entender o que vc está retornando!

sempre uso link em datatable e até agora nao tive problemas!

Codigo:
public String carregarDetalhes() {

		System.out.println("Método");

		detalheDao = new DetalhePedidoDAO();
		cotacaoDAO = new CotacaoAdamentoDAO();

		model = cotacaoDAO.carregarDetalhePedidoCotacao(index);

		dtModel = detalheDao.carregarDetalhesDAO(index);

		lanceModal = detalheDao.carregarDetalhesLancesDao(index);

		dadosModel = detalheDao.carregarDadosCompraDAO(index);

		return "detalhe";

	}
Faces-config.xml:
<navigation-rule>
		<from-view-id>/cotacaoAndamento.jsp</from-view-id>
		<navigation-case>
			<from-outcome>detalhe</from-outcome>
			<to-view-id>/detalhePedido.jsp</to-view-id>
		</navigation-case>
	</navigation-rule>
Hebert_Coelho

Vc está tendo algum erro no console?

Diguinho.Max

segue um exemplo.

<rich:dataTable id="tbFuncionarios"
								value="#{funcVisao.funcionariosConsulta}" var="func"
								style="width: 100%">
								<f:facet name="header">
									<h:outputLabel value="Funcionarios" for="tbFuncionarios" />
								</f:facet>
								<rich:column>
									<f:facet name="header">
										<h:outputLabel value="Nome" />
									</f:facet>
									<h:outputText value="#{func.nome}" />
								</rich:column>
								<rich:column>
									<f:facet name="header">
										<h:outputLabel value="CPF" />
									</f:facet>
									<h:outputText value="#{func.cpf}" />
								</rich:column>
								<rich:column>
									<f:facet name="header">
										<h:outputLabel value="RG" />
									</f:facet>
									<h:outputText value="#{func.rg}" />
								</rich:column>
								<rich:column>
									<f:facet name="header">
										<h:outputLabel value="Data de Nascimento" />
									</f:facet>
									<h:outputText value="#{func.dataNascimento}">
										<f:convertDateTime pattern="dd/MM/yyy" />
									</h:outputText>
								</rich:column>
								<rich:column>
									<f:facet name="header">
										<h:outputLabel value="Salario" />
									</f:facet>
									<h:outputText value="#{func.salario}" />
								</rich:column>
								<rich:column>
									<f:facet name="header">
										<h:outputLabel value="Ações" />
									</f:facet>
									<center>
										<a4j:commandLink action="#{funcVisao.excluirFuncionario}"
											render="outFuncionarios" style="border: none;">
											<h:graphicImage styleClass="graphicImage" library="images"
												name="excluir.png" />
											<f:setPropertyActionListener
												target="#{funcVisao.funcionario}" value="#{func}"></f:setPropertyActionListener>
										</a4j:commandLink>
										<h:commandLink action="#{funcVisao.alterar}">
											<h:graphicImage styleClass="graphicImage" library="images"
												name="alterar.png" />
											<f:setPropertyActionListener
												target="#{funcVisao.funcionario}" value="#{func}"></f:setPropertyActionListener>
										</h:commandLink>
									</center>
								</rich:column>
							</rich:dataTable>

aqui são os metodos fiz com dois tipos de link um com a4j e outro com h:commandLink

public void excluirFuncionario() {
		funcionariosConsulta.remove(funcionario);
		funcionarios.remove(funcionario);
		exibirMensagem("Funcionario excluido com sucesso.");

	}

	public void alterarFuncionario(ActionEvent e) {
		for (int i = 0; i < funcionarios.size(); i++) {
			Funcionario f = funcionarios.get(i);
			if (f.getCpf().equals(funcionario.getCpf())) {
				funcionarios.set(i, getFuncionario());
				exibirMensagem("Funcionário alterado com sucesso.");
			} else {
				exibirMensagem("Não foi possivel alterar.");
			}
		}
	}

espero ter ajudado.

rapha.java

jakefrog:
Vc está tendo algum erro no console?

Não dá nenhum erro ! Quando é o h:commandLInk ele só recarrega a página, quando é o a4j:commandLink não acontece nada !
O cosnole não apresenta nenhum erro!

A

Então com o h:commandLInk ele executa o método, correto ?

Com o a4j:commandLink ele também executa o método ???

Não falta o render no a4j:cammandLink ???

[]'s

rapha.java

alex.brito:
Então com o h:commandLInk ele executa o método, correto ?

Com o a4j:commandLink ele também executa o método ???

Não falta o render no a4j:cammandLink ???

[]'s

Não, o link não esta chamando o metodo ! tentei em outros links e funcionou mas este dentro do datatable não funcionou !

Hebert_Coelho

Teria como você postar mais da página? Incluindo declaração do form?

rapha.java
jakefrog:
Teria como você postar mais da página? Incluindo declaração do form?

PÁGINA INTEIRA

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<f:view>
	<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Cotações em andamento</title>
</head>
<body>
	<a4j:keepAlive beanName="detalhe" />
	<h:form>
		<%@ include file="/include/pageTop.jsp"%>

		<rich:toolBar height="30px" width="100%">
			<h:outputText value="Pedidos em Andamento" />
		</rich:toolBar>
		<rich:spacer height="5" />
		<h:panelGrid id="gridPesquisa" columns="2">
			<rich:columnGroup>
				<rich:column>
					<h:outputLabel value="Status: " for="cboStatus" />
				</rich:column>
				<rich:column>

					<h:selectOneMenu id="cboStatus"
						style="width:350px;text-align:left;"
						valueChangeListener="#{andamento.listarGrid }">
						<f:selectItems value="#{andamento.status }" />
						<a4j:support event="onchange" reRender="tableResult" />
					</h:selectOneMenu>

				</rich:column>
			</rich:columnGroup>

			<rich:columnGroup>
				<rich:column>
					<h:outputLabel value="Fornecedor: " for="txtFornecedor" />
				</rich:column>

				<rich:column>
					<h:inputText size="40" id="txtFornecedor"
						value="#{andamento.model.fornecedor }" />
					<h:outputLabel value="Nº Cotação: " for="cotacao" />
					<h:inputText id="cotacao" size="30"
						value="#{andamento.model.cotacao }" />
				</rich:column>
			</rich:columnGroup>

			<rich:columnGroup>
				<rich:column>
					<h:outputLabel value="Atendimento" for="txtAtendimento" />
				</rich:column>
				<rich:column>
					<h:inputText size="40" id="txtAtendimento"
						value="#{andamento.model.atendimento }" />
				</rich:column>
			</rich:columnGroup>
			<a4j:commandButton value="Pesquisar" reRender="tableResult"
				action="#{andamento.pesquisar}" />
		</h:panelGrid>
		<rich:spacer height="10px" />
		<rich:toolBar>
			<h:outputText value="Resultados" />
		</rich:toolBar>

		<rich:dataTable id="tableResult" var="result" border="1" width="100%"
			value="#{andamento.informacoes}">
			<rich:column>
				<h:graphicImage value="images/bola_amarela.gif"
					rendered="#{result.status=='Em Atenção'}" />
				<h:graphicImage value="images/bolaVerde.jpg"
					rendered="#{result.status=='No Prazo'}" />
				<h:graphicImage value="images/bolavermelha.jpg"
					rendered="#{result.status=='Em Atraso'}" />
			</rich:column>

			<rich:column>
				<f:facet name="header">
					<h:outputText value="Cotação" />
				</f:facet>
				<h:outputText value="#{result.cotacao }" />
			</rich:column>
			<rich:column>
				<f:facet name="header">
					<h:outputText value="Atendimento" />
				</f:facet>
				<h:outputText value="#{result.atendimento }" />
			</rich:column>
			<rich:column>
				<f:facet name="header">
					<h:outputText value="Marca" />
				</f:facet>
				<h:outputText value="#{result.marca }" />
			</rich:column>
			<rich:column>
				<f:facet name="header">
					<h:outputText value="Peça" />
				</f:facet>
				<h:outputText value="#{result.peca }" />
			</rich:column>
			<rich:column>
				<f:facet name="header">
					<h:outputText value="Prazo" />
				</f:facet>
				<h:outputText value="#{result.prazo }" />
			</rich:column>
			<rich:column>
				<f:facet name="header">
					<h:outputText value="Detalhe" />
				</f:facet>
				<a4j:commandLink action="#{detalhe.carregarDetalhes}"
					value="#{result.detalhe }" id="cotacao">
					<f:setPropertyActionListener value="#{result}"
						target="#{detalhe.index }" />
				</a4j:commandLink>
			</rich:column>
		</rich:dataTable>
		<a4j:commandButton value="Voltar" id="btnVoltar" />
	</h:form>
</body>
	</html>
</f:view>
Diguinho.Max

tente colocar o dataTable dentro de um <a4j:outputPanel id"teste" ajaxRendered="true">Sua table</a4j:outputPanel>

rapha.java

CONSEGUI arrumar mudei o escopo do meu BEAN para session e funcionou !

Hebert_Coelho

Só tome cuidado que colocando seu MBean para sessão, cada usuário terá um objeto desse cara na sessão. Com isso a memória consumida pela sua app iria aumentar bastante.

Ainda mais se a lista também está salva na sessão. ^^

Diguinho.Max

è com o escopo de sessao se nao tomar cuidado você irá consumir muita memoria mesmo ;/
como nosso amigo disse!

rogeriotadim1

Alguem teria uma sugestão de como resolver o problema sem alterar o escopo do bean para session?

Hebert_Coelho

rogeriotadim:
Alguem teria uma sugestão de como resolver o problema sem alterar o escopo do bean para session?
ViewScoped eh uma saída.

P

Olá amigos, aproveitando o tópico para não abrir um novo… o servidor usado de vocês é o Tomcat??

estou tendo o mesmo, com a unica diferença que estou usando o primefaces… mas comigo nem Session ou ViewScoped funciona =/

perguntei do servidor, pq tenho uma outra aplicação com o Jboss 7 e nele funciona normal…
se alguem tiver uma sugestão…

Obrigado!

rogeriotadim1

pcsantana:
Olá amigos, aproveitando o tópico para não abrir um novo… o servidor usado de vocês é o Tomcat??

estou tendo o mesmo, com a unica diferença que estou usando o primefaces… mas comigo nem Session ou ViewScoped funciona =/

perguntei do servidor, pq tenho uma outra aplicação com o Jboss 7 e nele funciona normal…
se alguem tiver uma sugestão…

Obrigado!

No meu caso é o JBoss 6.

P

depois de fuçar um pouco, descobri na “sorte” o problema…

estou usando facelets, e no meu template, tem um h:form que abrange tudo… não sei dizer porque, mas com ele ali não funciona…
Imagino eu que seja porque, como na pagina que usa o template tbm tem um form, acaba ficando um form dentro do outro… dai o update="@form" acaba se perdendo…

foi só tirar o form do template e sucesso :smiley:

Criado 1 de novembro de 2011
Ultima resposta 3 de ago. de 2012
Respostas 22
Participantes 6