Olá,
Sei quais os comandos para recuperar um parâmetro, mas onde devo colocá-los ? No construtor do backBean da página a ser exibida ? Se este backbean tiver escopo de sessão, ele só vai ser executado na primeira vez. Se for escopo de request, ele é executado sempre, mas quando clico no commandButton para gravar, o construtor é executado novamente ?!?@!?@!@?
São duas páginas, uma com uma lista ( e link ) e outra com os campos de cadastro e o commandbutton. Toda vez que clico no commandbutton, o construtor é executado novamente ( e eu não quero isto )
Obrigado,
Marcio
Cara, você fez uma confusão. O escopo Session faz seu Bean permanecer na sessão até que seja retirado, e o request permanece só durante aquela página. Pode ser por isso que esteja dando erro.
Se você quiser que um BackingBean seja instanciado somente uma vez, sendo assim seu construtor sera executado uma só vez, esse BackingBean tem que ter o escopo configurado como session.
espero ter ajudado.
O escopo pode ( e deve ) ser request . O problema é que no construtor do backingBean, eu recupero o parâmetro. Até ai tudo bem. Mas quando eu clico no commandButton para gravar, este mesmo construtor é chamado novamente ( ?!?!?!?!! ) e ele tenta recuperar o parâmetro novamente e ai vai tudo pro beleléu. Tem como o command não executar o construtor ? Tem algum outro lugar onde eu possa recuperar o parÂmetro ( e iniciar algumas propriedades em função deste parâmetro ) que não no construtor ?
Obrigado
Marcio
cara é uma péssima lógica ficar colocando regras em construtor, realmente não tens outra opção :?:
EDIT: porque não recuperar o parâmetro direto no método onde será gravado :?:
JavaBuntu,
Me ajude por favor. Também não acho boa idéia colocar lógica no construtor. Mas onde devo recuperar o parametro, instanciar um bjeto que vai ser exibido na página ? Este objeto deve ser instanciado antes da página ser exibida, pois ela exibirá as propriedades deste objeto para alteração. Se coloco a recupareção do parÂmetro em um método qualquer, como chamar este método antes de exibir a página ?
Deu para entender?
Marcio
cara é muito simples. imagine o contexto:
tenho um botão para editar um usuário:
<h:commandButton value="editar" action="#{meuBean.editarUsuario}">
<f:param id="editarUsuario" name="editarUsuario" value="#{bean.valor}" /> // bean.valor é o valor do parâmetro
</h:commandButton>
no MeuBean
public classe MeuBean
{
private Usuario novoUsurio; // get e set
public MeuBean{}
public String editarUsuario(ActionEvent event) {
// aqui vc recupera o parâmetro
UIParameter parameter = (UIParameter) event.getComponent().findComponent("editarUsuario");
// transforma o parâmetro em um Integer, isso se vc quiser, partindo do principio que vc quer o parâmetro como número, pois vem como Object
Integer codigo = new Integer(parameter.getValue().toString());
// seta o usuario de acordo com o código
setNovoUsuario minhaConsulta(codigo);
// aqui retorno uma String que está mapeada no faces-config que redireciona para a página de editar usuário, quando ela carregar já terá os valores.
return "editarUsuario";
}
}
sua página de editar usuario Editar.jsp
Nome: <h:inputText value="#{meuBean.novoUsuario.getNome}">
// aqui liga os demais campos do usuário com o value direto nas propriedades do novoUsuario
este é o cenário, qualquer dúvida pode falar, no que puder eu ajudo…
flw Hewerton
Cara… tu pode usar um filtro…
Mas vou verificar se não existe um jeito melhor de ser feito