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.