[JSF] commandLink simplesmente naõ funciona

Gente, eu tenho um commandLink na linha aplicação. O que elel faz? Ao ser clicado, eu chama um método que processa os dados e retorna uma mensagem. O config-faces recepta essa mensgame e abre outra tela, pelo navagation-rules.

Ok, eu li que muitas pessoas tiveram o mesmo problema - o commandLink simplesmente não chama o método. Só que em todos, o bastou mudar o escopo de request para session. Só que nõ meu caso, já está em session

Bom, eu vou postar os meus códigos.

página jsp-jsf:

<f:view>
	<h:form id="frm">
		<h:panelGrid id="dados" headerClass="tabelaCabecalhoAzulEsquerdo" width="100%">
			<h:dataTable rendered="#{! empty MPlacar.atbGeral}" value="#{MPlacar.atbGeral}" var="atb"
						 styleClass="tabelaCabecalhoAzulCentro"
						 rowClasses="FundoDestaqueBrancoCentro,FundoDestaqueAzulCentro" width="100%"
						 columnClasses="Centro,Centro,Esquerdo,Centro,Centro,Centro,Centro,Centro,Centro,Centro,Centro"
						 footerClass="tabelaRodapeAzul">
				<h:column>
					<f:facet name="header">
							<h:commandLink action="#{MIndicador.listarIndPI}">
									<h:outputText value="P. I." title="Processos Internos"/>
							</h:commandLink>
					</f:facet>
					<h:outputText value="#{atb.PROCESSOS_INTERNOS_SMT}"/>
				</h:column>
			</h:dataTable>
		</h:panelGrid>
	</h:form>
</f:view>

O meu ManagerBean MIndicador.java

/*
 * MIndicador.java
 *
 * Created on 4 de Julho de 2007, 11:53
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package br.com.bb.sigov.atb;

import java.lang.*;
import java.util.*;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;
/**
 *
 * @author f9343091
 */
public class MIndicador
{
    private MData mData;
    private MPlacar mPlacar;
    private String prsp;
    private Atb atb;
    
    private ListDataModel indicadores = null;
    
    /** Creates a new instance of MIndicador */
    public MIndicador()
    {
        atb = new Atb();
    }

    //--------------------------------------------------------------------------
    private void listarIndicador(String prsp, int depe, int espd, int anoAtual, int mesIni, int mesFim)
    {
        ArrayList<AtbDetalheBean> ind = new ArrayList();
        ind = atb.atbDetalheResultado(prsp,mPlacar.getDepe() ,mPlacar.getEspd() , mData.getAno(),mData.getMesIni(), mData.getMesIni() );
        indicadores = new ListDataModel(ind);
    }
    public String listarIndPI()
    {
        listarIndicador("PROCESSOS  INTERNOS", 0, mPlacar.getEspd() , mData.getAno(),mData.getMesIni(), mData.getMesIni() );
        setPrsp("Processos Internos");
        System.out.println("Chamou o método PI");
        return "indicadores";
    }
}

E o faces-config.xml

<faces-config>
    <navigation-rule>
        <from-view-id>atbPlacar.jsp</from-view-id>
        <navigation-case> 
            <from-outcome>indicadores</from-outcome> 
            <to-view-id>indicadores.jsp</to-view-id> 
        </navigation-case>
    </navigation-rule>
       
    <managed-bean>
        <managed-bean-name>MData</managed-bean-name>
        <managed-bean-class>br.com.bb.sigov.atb.MData</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    <managed-bean>
        <managed-bean-name>MPlacar</managed-bean-name>
        <managed-bean-class>br.com.bb.sigov.atb.MPlacar</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
        <managed-property>
            <property-name>MData</property-name>
            <value>#{MData}</value>
        </managed-property>
    </managed-bean>
    <managed-bean>
        <managed-bean-name>MIndicador</managed-bean-name>
        <managed-bean-class>br.com.bb.sigov.atb.MIndicador</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
        <managed-property>
            <property-name>MData</property-name>
            <value>#{MData}</value>
        </managed-property>
        <managed-property>
            <property-name>MPlacar</property-name>
            <value>#{MPlacar}</value>
        </managed-property>
    </managed-bean>
</faces-config>

pois é, alguém tem alguma idéia do porquê que esse commandLink não funciona?

Olá amigo,

use assim no seu código

<f:facet name="header">
                     <h:commandLink action="#{MIndicador.listarIndPI}">
                           <f:verbatim>Processos Internos</f:verbatim>
                     </h:commandLink>
               </f:facet> 

na nova versão do JSF eles irão corrigir este problema, e não será necessário utilizar a tag verbatim ok?

abraços!!

Oi Luciano!!

Tenho esse código numa jsp:


       <h:panelGrid border="1">
            <f:facet name="header">
                <h:panelGroup>
                    <h:outputText value="Product"/>
                            <h:outputText value=" "/>
                    <h:outputText value="Price"/>
                            <h:outputText value=" "/>
                    <h:outputText value="Details"/>
                </h:panelGroup>
            </f:facet>
               <h:dataTable  value='#{ProdutoFacade.produtosByCateg}' var='item' border="1" cellpadding="2" cellspacing="0">
                    <h:column>
                        <h:outputText value="#{item.cod_prod}"/>
                    </h:column>
                    <h:outputText value=" "/>
                    <h:column>
                        <h:outputText value="#{item.descricao}"/>
                    </h:column>
                    <f:facet name="header">
                     <h:commandLink action="#{ProdutoFacade.produtosDetalhes}"> 
                           <f:verbatim>Detalhes</f:verbatim> 
                    <f:param name="cod_prod" value="#{item.cod_prod}"/>
                       </h:commandLink> 
                </f:facet>
                </h:dataTable>
        </h:panelGrid>
A pagina mostra os produtos por categoria normalmente executando este metodo no produtoFacade

public List getprodutosByCateg() {
     try{
         Session session = HibernateUtil.currentSession();
         ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
         HttpServletRequest request = (HttpServletRequest)ec.getRequest();
         int param = Integer.parseInt(request.getParameter("prod_cat"));
       org.hibernate.Query query = session.createQuery(
                " select produto " +
                " from  " +
                " Produto as produto " +
                "  where  " +
                " produto.prod_cat = " + param );
        List list= query.list(); 
        return list;
     }catch(HibernateException e)
      { throw e;
      } 
   }  
Agora, por que quando chamo outro metodo dentro do mesmo bean produtoFacade, ele continua chamando o[size="9"] '#{ProdutoFacade.produtosByCateg}' [/size], é por que está dentro do dataTable?? Como corrijo isso??

Valeu