a4j:commandButton não executa action

8 respostas
L

Pessoal, alguém pode me dar um help… tenho o seguinte formulário de pesquisa:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j">

<body>
   <ui:composition template="#{managedBeanMenu.menu}">
      <ui:define name="conteudo">
      <f:loadBundle basename="mensagens" var="msg" />
            
      <f:view>
         <rich:panel>
            <f:facet name="header">
               <h:outputText value="Consulta de Fisioterapeutas" />
            </f:facet>
				  
            <a4j:outputPanel>
               <a4j:form ajaxSubmit="true" id="formFisioterapeuta">
                  <fieldset>
                     &lt;legend&gt;<b>Consulta por bairro</b>&lt;/legend&gt;
                        &lt;h:outputText value="Os campos com * são obrigatórios" /&gt;
                        <br /><br />
				  
                        &lt;h:panelGrid columns="2" cellspacing="10"&gt;
                           &lt;h:outputLabel for="areaTrabalho" value="*Área de trabalho (bairro): " /&gt;
                           &lt;h:inputText id="areaTrabalho" value="#{managedBeanFisioterapeuta.fisioterapeuta.areaTrabalho}" /&gt;
                        &lt;/h:panelGrid&gt;
                        &lt;a4j:commandButton value="consultar" action="#{managedBeanFisioterapeuta.consultar}" /&gt;
                     &lt;/fieldset&gt;
                     
                     &lt;rich:messages styleClass="msgErro" /&gt;
                  &lt;/a4j:form&gt;
               &lt;/a4j:outputPanel&gt;
            &lt;/rich:panel&gt;
         &lt;/f:view&gt;
      &lt;/ui:define&gt;
   &lt;/ui:composition&gt;
&lt;/body&gt;
&lt;/html&gt;

o método consultar do managedBeanFisioterapeuta é o seguinte:

public String consultar() throws Exception {
   setMensagem(null);
   setResposta(null);
		
   FacesContext fc = FacesContext.getCurrentInstance();
		
   if(getFisioterapeuta().getAreaTrabalho().trim().length() == 0) {
      setMensagem(MessageFactory.getMessage("campoObrigatorio", new String[]{}));
   }else{
      setListaBairro(getFisioterapeuta().getAreaTrabalho());
      setResposta("respConsultaFisioterapeutaBairro");
   }
		
   if(getMensagem() != null){
      fc.addMessage("formFisioterapeuta", getMensagem());
   }

   return getResposta();
}

o método setListaBairro que cria um List de Fisioterapeutas é o seguinte:

public void setListaBairro(String bairro) throws Exception {
   this.listaBairro.clear();

   for (Object obj : new FisioterapeutaDao().listaBairro(bairro)) {
      listaBairro.add((Fisioterapeuta) obj);
   }

e o método listaBairro(bairro) é o seguinte:

public List&lt;Fisioterapeuta&gt; listaBairro(String bairro) throws Exception {
   open();
		
   query = session.createQuery("from Fisioterapeuta where areaTrabalho like :bairro");
   query.setString("bairro", "%" + bairro + "%");
		
   return query.list();
}

bom, em resumo é um formulário de pesquisa ainda pessoa indica um bairro… o bean monta uma lista por meio da query e chama a página respConsultaFisioterapeutaBairro. nessa página eu tenho o seguinte pedaço:

&lt;rich:dataTable width="980" value="#{managedBeanFisioterapeuta.listaBairro}" var="dados" rows="15" id="tabelaFisioterapeuta" reRender="ds"&gt;
   &lt;f:facet name="header"&gt;
      &lt;rich:columnGroup&gt;
         &lt;rich:column&gt;
            &lt;h:outputText value="Nome" /&gt;
         &lt;/rich:column&gt;
                                    
         &lt;rich:column&gt;
            &lt;h:outputText value="CPF" /&gt;
         &lt;/rich:column&gt;
                                    
         &lt;rich:column width="9%"&gt;
            &lt;h:outputText value="Telefone" /&gt;
         &lt;/rich:column&gt;
                                    
         &lt;rich:column width="9%"&gt;
            &lt;h:outputText value="Celular" /&gt;
         &lt;/rich:column&gt;
                                    
         &lt;rich:column&gt;
            &lt;h:outputText value="Área de atuação" /&gt;
         &lt;/rich:column&gt;
                                    
         &lt;rich:column width="8%"&gt;
            &lt;h:outputText value="Ação" /&gt;
         &lt;/rich:column&gt;
      &lt;/rich:columnGroup&gt;
   &lt;/f:facet&gt;

   &lt;rich:column filterBy="#{dados.nome}" filterEvent="onkeyup"&gt;
      &lt;h:outputText value="#{dados.nome}" /&gt;
   &lt;/rich:column&gt;
                              
   &lt;rich:column filterBy="#{dados.cpf}" filterEvent="onkeyup"&gt;
      &lt;h:outputText value="#{dados.cpf}" /&gt;
   &lt;/rich:column&gt;
                              
   &lt;rich:column&gt;
      &lt;h:outputText value="#{dados.telefone}" /&gt;
   &lt;/rich:column&gt;
                              
   &lt;rich:column&gt;
      &lt;h:outputText value="#{dados.celular}" /&gt;
   &lt;/rich:column&gt;
                              
   &lt;rich:column&gt;
      &lt;h:outputText value="#{dados.areaTrabalho}" /&gt;
   &lt;/rich:column&gt;

   &lt;rich:column&gt;
      &lt;a4j:commandLink action="#{managedBeanFisioterapeuta.recuperaFisioterapeuta}"&gt;
         &lt;h:graphicImage value="imagens/detalhar.jpg" width="20" height="20" styleClass="borda" id="imgDetalhar" /&gt;
            &lt;rich:toolTip value="Detalhar" for="imgDetalhar" /&gt;

            &lt;f:param id="idDetalhaFisioterapeuta" name="idDetalhaFisioterapeuta" value="#{dados.idFisioterapeuta}" /&gt;
            &lt;f:param name="acao" value="1" /&gt;
      &lt;/a4j:commandLink&gt;

      &lt;a4j:commandLink action="#{managedBeanFisioterapeuta.recuperaFisioterapeuta}"&gt;
         &lt;h:graphicImage value="imagens/edit.gif" width="20" height="20" styleClass="borda" id="imgEdit" /&gt;
            &lt;rich:toolTip value="Editar" for="imgEdit" /&gt;
   
            &lt;f:param id="idAlteraFisioterapeuta" name="idAlteraFisioterapeuta" value="#{dados.idFisioterapeuta}" /&gt;
            &lt;f:param name="acao" value="2" /&gt;
      &lt;/a4j:commandLink&gt;

      &lt;a4j:commandLink action="#{managedBeanFisioterapeuta.recuperaFisioterapeuta}" reRender="panelExcluiFisioterapeuta" oncomplete="Richfaces.showModalPanel('panelExcluiFisioterapeuta');"&gt;
         &lt;h:graphicImage value="imagens/excluir.gif" width="20" height="20" styleClass="borda" id="imgExcluir" /&gt;
            &lt;rich:toolTip value="Excluir" for="imgExcluir" /&gt;

            &lt;f:param id="idExcluiFisioterapeuta" name="idExcluiFisioterapeuta" value="#{dados.idFisioterapeuta}" /&gt;
            &lt;f:param name="acao" value="3" /&gt;
      &lt;/a4j:commandLink&gt;
   &lt;/rich:column&gt;

   &lt;f:facet name="footer"&gt;
      &lt;rich:datascroller for="tabelaFisioterapeuta" id="ds" renderIfSinglePage="false" /&gt;
   &lt;/f:facet&gt;
&lt;/rich:dataTable&gt;

O problema todo é quando chega aí… eu faço a consulta, ele monta a tabela, mas os 3 <a4j:commandLink> ignoram completamente a existência do action, não fazendo nada quando se clica neles…

Se alguém puder ajudar agredeço muito.

8 Respostas

mgarcia

posta o método recuperaFisioterapeuta do managedBeanFisioterapeuta

L

Foi mal… esquecí de postar ele, segue abaixo:

public String recuperaFisioterapeuta() throws Exception {
   setResposta(null);

   setFisioterapeuta((Fisioterapeuta) ((HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest()).getAttribute("dados"));
   setEndereco(getFisioterapeuta().getEndereco());
   setDadosBancarios(getFisioterapeuta().getDadosBancarios());
   setUsuario(getFisioterapeuta().getUsuario());
		
   int acao = Integer.parseInt((String) FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("acao"));
		
   switch (acao) {
   case 1:
      setResposta("detalhaFisioterapeuta");
      break;

   case 2:
      setResposta("alteraFisioterapeuta");
      break;
   }

   return getResposta();
}
edercolin

A assinatura do método não deveria a descrita abaixo?

public void recuperaFisioterapeuta(ActionEvent event)
L

Mas se eu tenho um <a4j:commandLink action="#{managedBeanFisioterapeuta.recuperaFisioterapeuta}"> o método ñ tem que ser de retorno String? se ñ como eu vou indicar para aonde ele tem ir após o seu processamento?

P

e cade os panels que tu chama nos links?

reRender=“panelExcluiFisioterapeuta” oncomplete=“Richfaces.showModalPanel(‘panelExcluiFisioterapeuta’);”>

edercolin

Ta certo, deveria ser a assinatura que falei se no lugar de action fosse um actionListener, neste caso após executar o método o fluxo voltaria para a mesma pagina!

Como pelo jeito é para abrir uma pagina nova, a pagina inteira será carregada, não precida utilizar o atributo reRender!

L

tá mais abaixo… mas isso ñ tem interferência nenhuma… vou colovar o código completo da página que está com problema:

&lt;?xml version='1.0' encoding='UTF-8' ?&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;

&lt;html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j"&gt;

&lt;body&gt;
   &lt;ui:composition template="#{managedBeanMenu.menu}"&gt;
      &lt;ui:define name="conteudo"&gt;
         &lt;f:view&gt;
            &lt;rich:panel&gt;
               &lt;f:facet name="header"&gt;
                  &lt;h:outputText value="Consulta de Fisioterapeutas" /&gt;
               &lt;/f:facet&gt;

               &lt;a4j:outputPanel&gt;
                  &lt;a4j:form ajaxSubmit="true" id="formFisioterapeuta"&gt;
                     &lt;fieldset&gt;
                        &lt;legend&gt;<b>Gerenciamento de Fisioterapeutas</b>&lt;/legend&gt;
                        
                        &lt;rich:dataTable width="980" value="#{managedBeanFisioterapeuta.listaBairro}" var="dados" rows="15" id="tabelaFisioterapeuta" reRender="ds"&gt;
                           &lt;f:facet name="header"&gt;
                              &lt;rich:columnGroup&gt;
                                 &lt;rich:column&gt;
                                    &lt;h:outputText value="Nome" /&gt;
                                 &lt;/rich:column&gt;
                                    
                                 &lt;rich:column&gt;
                                    &lt;h:outputText value="CPF" /&gt;
                                 &lt;/rich:column&gt;
                                    
                                 &lt;rich:column width="9%"&gt;
                                    &lt;h:outputText value="Telefone" /&gt;
                                 &lt;/rich:column&gt;
                                    
                                 &lt;rich:column width="9%"&gt;
                                    &lt;h:outputText value="Celular" /&gt;
                                 &lt;/rich:column&gt;
                                    
                                 &lt;rich:column&gt;
                                    &lt;h:outputText value="Área de atuação" /&gt;
                                 &lt;/rich:column&gt;
                                    
                                 &lt;rich:column width="8%"&gt;
                                    &lt;h:outputText value="Ação" /&gt;
                                 &lt;/rich:column&gt;
                              &lt;/rich:columnGroup&gt;
                           &lt;/f:facet&gt;

                           &lt;rich:column filterBy="#{dados.nome}" filterEvent="onkeyup"&gt;
                              &lt;h:outputText value="#{dados.nome}" /&gt;
                           &lt;/rich:column&gt;
                              
                           &lt;rich:column filterBy="#{dados.cpf}" filterEvent="onkeyup"&gt;
                              &lt;h:outputText value="#{dados.cpf}" /&gt;
                           &lt;/rich:column&gt;
                              
                           &lt;rich:column&gt;
                              &lt;h:outputText value="#{dados.telefone}" /&gt;
                           &lt;/rich:column&gt;
                              
                           &lt;rich:column&gt;
                              &lt;h:outputText value="#{dados.celular}" /&gt;
                           &lt;/rich:column&gt;
                              
                           &lt;rich:column&gt;
                              &lt;h:outputText value="#{dados.areaTrabalho}" /&gt;
                           &lt;/rich:column&gt;

                           &lt;rich:column&gt;
                              &lt;a4j:commandLink action="#{managedBeanFisioterapeuta.recuperaFisioterapeuta}"&gt;
                                 &lt;h:graphicImage value="imagens/detalhar.jpg" width="20" height="20" styleClass="borda" id="imgDetalhar" /&gt;
                                    &lt;rich:toolTip value="Detalhar" for="imgDetalhar" /&gt;

                                    &lt;f:param id="idDetalhaFisioterapeuta" name="idDetalhaFisioterapeuta" value="#{dados.idFisioterapeuta}" /&gt;
                                    &lt;f:param name="acao" value="1" /&gt;
                              &lt;/a4j:commandLink&gt;

                              &lt;a4j:commandLink action="#{managedBeanFisioterapeuta.recuperaFisioterapeuta}"&gt;
                                 &lt;h:graphicImage value="imagens/edit.gif" width="20" height="20" styleClass="borda" id="imgEdit" /&gt;
                                    &lt;rich:toolTip value="Editar" for="imgEdit" /&gt;

                                    &lt;f:param id="idAlteraFisioterapeuta" name="idAlteraFisioterapeuta" value="#{dados.idFisioterapeuta}" /&gt;
                                    &lt;f:param name="acao" value="2" /&gt;
                              &lt;/a4j:commandLink&gt;

                              &lt;a4j:commandLink action="#{managedBeanFisioterapeuta.recuperaFisioterapeuta}" reRender="panelExcluiFisioterapeuta" oncomplete="Richfaces.showModalPanel('panelExcluiFisioterapeuta');"&gt;
                                 &lt;h:graphicImage value="imagens/excluir.gif" width="20" height="20" styleClass="borda" id="imgExcluir" /&gt;
                                    &lt;rich:toolTip value="Excluir" for="imgExcluir" /&gt;

                                    &lt;f:param id="idExcluiFisioterapeuta" name="idExcluiFisioterapeuta" value="#{dados.idFisioterapeuta}" /&gt;
                                    &lt;f:param name="acao" value="3" /&gt;
                              &lt;/a4j:commandLink&gt;
                           &lt;/rich:column&gt;

                           &lt;f:facet name="footer"&gt;
                              &lt;rich:datascroller for="tabelaFisioterapeuta" id="ds" renderIfSinglePage="false" /&gt;
                           &lt;/f:facet&gt;
                        &lt;/rich:dataTable&gt;
                     &lt;/fieldset&gt;
                     &lt;rich:messages styleClass="msgErro" /&gt;
                  &lt;/a4j:form&gt;
               &lt;/a4j:outputPanel&gt;

               &lt;rich:modalPanel id="panelExcluiFisioterapeuta" height="100"&gt;
                  &lt;f:facet name="header"&gt;
                     &lt;h:panelGroup&gt;
                        &lt;h:outputText value="Exclusão de Fisioterapeutas" /&gt;
                     &lt;/h:panelGroup&gt;
                  &lt;/f:facet&gt;

                  &lt;f:facet name="controls"&gt;
                     &lt;h:panelGroup&gt;
                        &lt;h:graphicImage value="/imagens/close.png" style="cursor:pointer;" id="hideLinkExclui"/&gt;
                           &lt;rich:componentControl for="panelExcluiFisioterapeuta" attachTo="hideLinkExclui" operation="hide" event="onclick"/&gt;
                        &lt;/h:panelGroup&gt;
                     &lt;/f:facet&gt;

                     &lt;a4j:form&gt;
                        &lt;h:inputHidden value="#{managedBeanFisioterapeuta.fisioterapeuta.idFisioterapeuta}" /&gt;
                        &lt;h:inputHidden value="#{managedBeanFisioterapeuta.fisioterapeuta.endereco.idEndereco}" /&gt;
                        &lt;h:inputHidden value="#{managedBeanFisioterapeuta.fisioterapeuta.dadosBancarios.idDadosBancarios}" /&gt;
                        &lt;h:inputHidden value="#{managedBeanFisioterapeuta.fisioterapeuta.usuario.idUsuario}" /&gt;
                        
                        &lt;center&gt;
                           &lt;h:outputText value="Deseja excluir o fisioterapeuta #{managedBeanFisioterapeuta.fisioterapeuta.nome}?" /&gt;
                           <br /><br />

                           &lt;a4j:commandButton value="excluir" action="#{managedBeanFisioterapeuta.excluir}" oncomplete="Richfaces.hideModalPanel('panelExcluiFisioterapeuta');" reRender="tabelaFisioterapeuta" /&gt;
                           &lt;a4j:commandButton value="cancelar" onclick="Richfaces.hideModalPanel('panelExcluiFisioterapeuta');" /&gt;
                        &lt;/center&gt;
                     &lt;/a4j:form&gt;
                  &lt;/rich:modalPanel&gt;
               &lt;/rich:panel&gt;
            &lt;/f:view&gt;
         &lt;/ui:define&gt;
      &lt;/ui:composition&gt;
   &lt;/body&gt;
&lt;/html&gt;
L

como pode ser visto, o mesmo método é chamado 3 vezes… uma para detalhar, uma para alterar e uma para excluir… o reRender está apenas no exluir pq ele chama o modalPanel e eu preciso dar um reRender nele para jogar o bean populado nele… Nos outros 2 ñ existe o reRender justamente porque ele vai para outra página… o problema td é que vc pode clicar em qualquer um dos 3 e ele ñ faz absolutamente nda… nem chega lá no método recupera.

Criado 9 de setembro de 2010
Ultima resposta 9 de set. de 2010
Respostas 8
Participantes 4