[JSF] CommandLink simplesmente não 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?

Tem um bug conhecido que commandLink não funciona em dataTable, dá uma pesquisada no fórum da JSF (ou do myfaces!)

Pois é, esse bug é queando o escopo é request. Daí vc muda para session. Mas no meu caso j´aestá como session. deve ser outra coisa

Ah nõa, ah não, ah não.

Eu mudei de Commandlink para CommandButton e aconteceu o mesmo problema. O Manager Bean não é chamado e a página é recarregada.

Eu tive o mesmo problema com JSF e o commandLink.
A solução foi utilizar a biblioteca tomahawk, disponível no site do MyFaces.
Esta biblioteca possui a tag <saveState>, que deverá resolver o problema.

Abraço.

Luis, esse sistema que você está desenvolvendo já esta em uma fase avançada ?

Vocês estão utilizando jsf 1.1 ou 1.2 ?

Se o servidor permitir utilize jsf 1.2, na versão 1.2 esse bug já foi corrigido

Estamos utilizando o JSF 1.1. Obrigado pelo dica, mas infelizmente hoje não podemos utilizar ainda a versão 1.2.

Abraço !

Olha, eu mudei da lib 1.1 default do netbeans para a a última versão do MyFaces e… nada. Está acontecendo o mesmo problema.

inclusive eu mudei de commandlink para commandbutton e naõ navega. O componente simplesmente não chama o MBean.

Olá,

Faz um teste, coloca no teu commandLink onsubmit=“this” ou onclick nao lembro ao certo.

]['s

Não funcionou.

Olha, eu coloquei uma tag mensages e olha o resultado:

ninguém???

O JSF não está encontrando o método set para a propriedade

Procure por “no write method for property” nessa página.

http://myfaces.apache.org/impl/xref/org/apache/myfaces/el/PropertyResolverImpl.html

Acho melhor você renomear essa propriedade, já apresentou problemas antes.

Fred

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

[/quote]

Estou tendo mesmo problema (bug) o danado é causado pelo

Tira isso da table que funciona,
no meu caso é com um panel, se uso rendered condicional, o commandLink não funciona, mas se tiro o rendered funciona!

:cry: :cry: :cry:

Alguém sabe como resolver?

PS: Revivendo thread velha!