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

22 respostas
R

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

H

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

R

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 !

D

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

H

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

R
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>
H

Vc está tendo algum erro no console?

D

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.

R

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

R

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 !

H

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

R
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>
D

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

R

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

H

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. ^^

D

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

R

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

H

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!

R

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