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

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

[code]<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>

[/code]

Todas as configurações estão corretas !

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

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

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

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!

Opa, boa tarde.

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

o link está dentro de um form ?

[]'s

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

[quote=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![/quote]

Codigo:

[code]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";

}[/code]

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>

Vc está tendo algum erro no console?

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.

[quote=jakefrog]Vc está tendo algum erro no console?
[/quote]
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!

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

[quote=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[/quote]

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

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

PÁGINA INTEIRA

[code]<%@ 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”%>

<f:view>

Cotações em andamento <%@ 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>
[/code]

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

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

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

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

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

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