Diabo_Loiro 18 de out. de 2011
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.
=)
execao 18 de out. de 2011
Oh valeu.
Eu to com jsf1.2, mas nao consegui setar um atributo no FacesContext, podem me dar um exemplo?
Valeu
Diabo_Loiro 19 de out. de 2011
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!
execao 19 de out. de 2011
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 20 de out. de 2011
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" ;
}
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.