Problema com JSF

4 respostas
M

Pessoal,

Estou com um problema aqui e definitivamente não sou capaz de resolver…já tentei de tudo, simplesmente não funciona!

O caso é o seguinte: Eu tenho uma página que faz a listagem de alguns dados em um dataTable, e uma das colunas tem um commandButton com um actionListener que chama um método que simplesmente carrega um pojo com alguns dados do item selecionado e da a saida “preparaListaPerguntaOK”, indicando que é para ir a outra página aonde será listado as perguntas do teste selecionado:

<h:column>
         <f:facet name="header">
                 <h:outputText value="Explorar"/>
         </f:facet>
         <h:commandButton image="img/img_ativa_pequeno.gif" style="width:14px; height:14px" value="#{testeTable.IDTeste}" actionListener = "#{TesteMB.goToPergunta}"/>   
   </h:column>
public String goToPergunta() 
    {
        try
        {
            TesteDAO testeDAO = new TesteDAO();
            
            //CARREGA POJO COM OS DADOS DO TESTE
            testeDAO.getTeste(testePojo);
           
            return "preparaListaPerguntaOK";
        }
        catch(Exception erro)
        {            
            setErro("ERRO: "+erro.getMessage());
        }        
    }
<navigation-rule>
        <description>
            Regra de navegacao apartir do /gestao_teste.jsp
        </description>
        <from-view-id>/gestao_teste.jsp</from-view-id>
       <navigation-case>
          <from-outcome>preparaListaPerguntaOK</from-outcome>
          <to-view-id>/lista_questao.jsp</to-view-id>
       </navigation-case>
      
       <navigation-case>
          <from-outcome>preparaEditarTesteOK</from-outcome>
          <to-view-id>/add_teste.jsp</to-view-id>
       </navigation-case>            
  </navigation-rule>

Bom, até ai tudo bem… ele carrega o Pojo certinho e mostra a página /lista_questao.jsp tudo certinho. O problema é agora, NENHUM CommandButton funciona nessa página… quando eu clico em algum deles a página simplesmente é recarregada e o método que deveria ser acionado lá no JAVA não é executado.

Fiz um teste executando a página /lista_questao.jsp diretamente, sem ser chamada apartir da página /gestao_teste.jsp e funcinou perfeitamente… mostrou os dados, e todos os commandbuttons funcionavam perfeitamente… o problema esta no fato dela ser chamada por outra página…

Deve ser um erro da minha parte bem simples, mas confesso que não sei o que é… já tentei de tudo.

Fico grato me ajuda e desde já agradeço .Obrigado

4 Respostas

L

Troque o tag “actionListener” por “action”.

Action Listeners são métodos que executam antes da ação principal, serve principalmente para fazer alguma manipulação na árvore de componentes. A assinatura de um método no actionListener é “public void method(ActionEvent event)”, enquanto a de um action é “public String method()”.

M

Leonardo3001 ,

Tudo bem, já fiz a alteração… porém como eu faço agora para passar o IDTeste para a outra página? pois eu preciso dele para buscar as perguntas apenas do teste selecionado…

Da forma como estava, eu pegava o ID da seguinte maneira:

testePojo.setIDTeste(Integer.parseInt(event.getComponent().getAttributes().get(“value”).toString()));

mas agora, sem o event, eu não tenho nem ideia de como pegar…

Obrigado pela sua colaboração.

L

Mas em JavaServer Faces, você não pega o valor buscando o componente, os valores não injetados nos Managed Beans automaticamente pra você!

Se for o problema de usar injeção de dependência em dataTable, encapsule sua coleção em um DataModel.

Dá uma googlada em dataTable e em DataModel pra ver como funciona.

M

Leonardo,

Consegui resolver o problema… e a solução eu encontrei aqui -> http://www.urubatan.com.br/2007/03/20/jsf_commandlink_datatable_problemas/

Até gostaria de agradeçer ao Urubatan, sei que ele participa aqui do Fórum e é por que existem pessoas como ele que compartilham o conhecimento que muita coisa funciona nesse nosso universo.

Obrigado Leonardo pela disposição em me ajudar…

Abraços

Criado 29 de setembro de 2007
Ultima resposta 30 de set. de 2007
Respostas 4
Participantes 2