Retornar variavel

5 respostas
E

Olá a todos,

Estou usando jsf e gostaria que me tirassem uma dúvida.

Estou tentando distinguir a inclusão da alteração na classe ChequeHandler.
Para isso estou usando a variavel acao, que recebe valor alterar quando é acionado o método escolheCheque()

public class ChequeHandler {

	String acao = null;

         public void escolheCheque(ActionEvent event) {
		UIComponent link = event.getComponent();
		UIParameter param = (UIParameter) link.findComponent("editId");
		Long id = (Long) param.getValue();

		this.cheque = this.dao.load(id);
		
		this.acao="alterar";
		
		
	}

        public String salva() {
				
		System.out.println("Acao"+ acao);
		
		this.dao.merge(this.cheque);
		this.cheque = new Cheque();
		return "sucesso";
	}

....

Quando printo o valor da acao no metodo escolheCheque() ele traz o valor alterar, mas qdo printo no metodo salva() ele vem null.

Alguem pode me ajudar.

5 Respostas

Diabo_Loiro

cara volta o metodo salva retorna null por que quando vc escolhe a opção no usacheque… ele manda um request… e zera tudo no bean…

seu bean provavelmente esta em escopo de request, se colocar session vai funcionar… mais não é recomendavel colocar o bean inteiro em scopo de session

se tiver usando JSF 1.2 voce pode pegar a session do FacesContext e setar apenas um atributo açao la. e no metodo salva dar um get dessa propriedade;

se tiver usando JSF 2.0 o VIEWSCOPE resolve seu probema, pois ele mantem estado ate voce mudar de tela não importa quantos request voce mande.

=)

E

Oh valeu.
Eu to com jsf1.2, mas nao consegui setar um atributo no FacesContext, podem me dar um exemplo?

Valeu

Diabo_Loiro

Para obter/abrir a sessão dentro de um backing bean do JSF vc pode fazer assim:

HttpSession session = ( HttpSession ) FacesContext.getCurrentInstance().getExternalContext().getSession( true );

Onde o valor boolean de getSession indica se você quer abrir uma nova sessão caso não haja uma aberta (true) ou se você não quer abrir uma nova sessão caso já haja alguma aberta (false). Se não houver sessão aberta retorna null se usar false.

Até mais!

E

Cara, não estou conseguindo visualizar isso no meu código…

Estou abrindo minha sessão dessa forma

public class ChequeHandler {

	private Cheque cheque = new Cheque();
	private Dao<Cheque> dao;
	
	SessionFactory sf = HibernateUtil.getSessionFactory();
	Session s = sf.openSession();
	
	String acao = null;
    
	public void setSessao(Session session) {
		this.dao = new Dao<Cheque>(session, Cheque.class);
	}

	public String salva() {
		this.dao.merge(this.cheque);
		this.cheque = new Cheque();
		return "sucesso";
	} 
..

Como poderia usar o getSession(true) que sugeriu?

Valeu

Diabo_Loiro

Cara eu estava falando o objeto HTTPSESSION que toda aplicação web tem.

neste objeto voce pode guardar objetos e recuperalos em quanto durar a sessão do usuario.

No seu caso voce vai fazer algo como;

public class ChequeHandler {  
  
    String acao = null;  
  
         public void escolheCheque(ActionEvent event) {  
        UIComponent link = event.getComponent();  
        UIParameter param = (UIParameter) link.findComponent("editId");  
        Long id = (Long) param.getValue();  
  
        this.cheque = this.dao.load(id);  
          
        this.acao="alterar";  

HttpSession session = ( HttpSession ) FacesContext.getCurrentInstance().getExternalContext().getSession();
session.put("acao","alterar")
          
          
    }  
  
        public String salva() {  


HttpSession session = ( HttpSession ) FacesContext.getCurrentInstance().getExternalContext().getSession();
   this.acao=(String)session.get("acao")
                            

        System.out.println("Acao"+ acao);  
          
        this.dao.merge(this.cheque);  
        this.cheque = new Cheque();  
        return "sucesso";  
    }
  • ou menos isso.

Voce deveria estudar JSP e servlets pois JSF,Spring mvc ou qualquer outro framework é feito baseado em servlets.

Agora se quiser entender o por que seu codigo não estava funcionando voce deve estudar os escopos e o ciclo de vida do JSF.

Criado 17 de outubro de 2011
Ultima resposta 20 de out. de 2011
Respostas 5
Participantes 2