Conforme o código abaixo, preciso que um determinado objeto seja instanciado em uma view de acordo com o que eu escolher em um SelectOneMenu. Pesquisei algumas coisas a respeito, mas não consegui, talvez por pouco conhecimento, encontrar a resposta.
@Named
@ViewScoped
public class UnidadeBean implements Serializable {
private static final long serialVersionUID = 1L;
private Unidade unidade;
@Inject
private Bloco bloco;
@Inject
private UnidadeService unidadeService;
private List<Unidade> listaUnidades;
private List<Bloco> listaBlocos;
private Bloco blocoSelecionado;
// Construtor reinicializando valores do formulario
// Metodo reinicialiaza objetos e valores
public void limparFormulario() {
unidade = new Unidade();
}
public void novaUnidade() {
unidade = new Unidade();
}
public void setBloco(Bloco bloco) {
this.bloco = bloco;
}
public void adicionarUnd() {
bloco.getUnidades().add(unidade);
unidade.setBloco(bloco);
}
public Unidade salvarUnidade() {
unidadeService.salvarUnidade(unidade);
MessagesFaces.addInfoMessage("Unidade salva com sucesso");
limparFormulario();
return null;
}
public Bloco salvarBloco() {
unidadeService.salvarBloco(bloco);
MessagesFaces.addInfoMessage("Bloco salvo com sucesso, acrescente unidades");
return null;
}
public void listarBlocos() {
if (FacesUtil.isNotPostback()) {
this.listaBlocos = unidadeService.listarBloco();
}
}
public List<Unidade> getListaUnidades() {
this.listaUnidades = unidadeService.listarUnidade();
return this.listaUnidades;
}
public Unidade getUnidade() {
return unidade;
}
public void setListaBlocos(List<Bloco> listaBlocos) {
this.listaBlocos = listaBlocos;
}
public List<Bloco> getListaBlocos() {
return listaBlocos;
}
public Bloco getBlocoSelecionado() {
return blocoSelecionado;
}
public void setBlocoSelecionado(Bloco blocoSelecionado) {
this.blocoSelecionado = blocoSelecionado;
}
public Bloco getBloco() {
return bloco;
}
}
Obrigado pela resposta, mas não é bem isto amigo !
Eu preciso ATRIBUIR o objeto selecionado no SELECTONEMENU na VIEW, para que ele possa ser editado.
O objeto precisa estar ativo na view. Eu tenho aqui uma receita de bolo para fazer isto usando VIEWPARAM, passando o id do objeto de uma outra página, mas o que eu quero fazer é na mesma página usando um seletor qualquer.
O código abaixo utiliza ajax para executar um método quando a opção selecionada do menu muda de valor e atribui a opção selecionada a um atributo do bean (O bean não pode ser RequestScoped, pois o ajax dispara uma requisição e o bean morrerá) e então atualiza o painel de edição
Seria um método qualquer do seu bean, se você quiser printar no console toda vez que selecionar uma opcao do selectOneMenu, basta criar um método e referencia-lo no listener do p:ajax
Mike, dentro da lógica do seu código, vou tentar te explicar a minha necessidade. Como eu sou um completo “noob”, de repente posso estar me atrapalhando e atrapalhando vocês.
Ao fazer uma seleção no selectOneMenu, eu quero ter uma instancia referente ao objeto selecionado. Por exemplo, seleciono “Notebook modelo 1000”, após a seleção, preciso ter este PRODUTO disponível e ativo na view, para que eu possa , por exemplo, acrescentar alguma “List”, não existente ainda, e desta forma, após incluir as “característicasTecnicas”, que seriam relacionadas via dataTable, eu salvaria.
Se eu fizesse isto vindo de outra página, seria assim:
Na VIEW que estivesse enviando o objeto, eu teria um button, que faria o envio do objeto "
Mike, a sua lógica esta bem clara, a confusão realmente é minha.
Eu preciso construir um método, no listener do seu código, que atribua o valor selecionado no SelectOneMenu, para a view. Eu já consegui fazer algumas coisas funcionarem, mas sinto que foi na base da “gambiarra”. Esta view em questão faz o cadastro de apartamentos a um determinado bloco já cadastrado. O selectOne Menu é para “ativar” o bloco na view , ai tenho o DIALOG, que atribui os apartamentos a este bloco, e depois salva.
Em uma tela simples, sem usar o datatable, cadastrando 1 a 1, eu consigo salvar as unidades sem problemas. Mas estou encontrando dificuldade de atribuir o datatable (array de unidade) para o bloco.
Esta tela tem que ficar de tal forma que, bastando eu selecionar o objeto no SelectOneMenu, ela já preencha os campos da view, referentes ao objeto selecionado, neste caso BLOCO e, desta forma, poderei alterar e acrescentar coisas a este objeto ativo.
Cara, se foi confuso, eu deleto este post e tento explicar de outra forma. Não tem frescura comigo, sei que sou bem cru ainda na coisa.
Mike, você fala bem qualquer idioma, fora o português? O que estava acontecendo foi uma conversa entre alguém que fala uma lingua e outro que só sabe dizer bom dia e boa tarde, eu no caso.
Sua dica e, sua paciência, foram de muita ajuda e com a seguinte adaptação do seu codigo, o problema foi resolvido:
Como a vida não é perfeita, com a resolução desta lógica, surgiu outra bucha, mas para resolvê-la irei pesquisar antes ou, se for o caso, abrirei outro post, pois este foi resolvido!