Amigos, preciso de ajuda com um problema.
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;
}
}
View
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
template="WEB-INF/templates/Layout.xhtml">
<ui:define name="content">
<f:metadata>
<f:event listener="#{unidadeBean.listarBlocos}" type="preRenderView"></f:event>
</f:metadata>
<div class="ui-fluid">
<h1 class="aw-page-title">Cadastro das Unidades do condomínio</h1>
<h:form id="form">
<p:messages autoUpdate="false" closable="true" />
<p:panelGrid id="grid1" columns="2" layout="grid"
style="margin-bottom: 15px" styleClass="panelgrid-noborder"
columnClasses="ui-grid-col-6, ui-grid-col-6">
<p:outputLabel value="Unidade: " for="unidade" />
<p:inputText id="unidade" label="Unidade"
value="#{unidadeBean.unidade.unidade}" />
<p:outputLabel value="Numero de Moradores: " for="nMoradores" />
<p:spinner id="nMoradores"
value="#{unidadeBean.unidade.qtdeMorador}" min="0" max="10">
<f:convertNumber />
</p:spinner>
<p:outputLabel value="Bloco: " for="bloco" />
<p:selectOneMenu id="bloco" value="#{unidadeBean.bloco}">
<f:converter binding="#{blocoConverterNamed}" />
<f:selectItem itemLabel="Selecione o seu bloco" />
<f:selectItems value="#{unidadeBean.listaBlocos}" var="bloco"
itemValue="#{bloco}" itemLabel="#{bloco.bloco}" />
</p:selectOneMenu>
<p:outputLabel />
<p:commandButton value="Adicionar Apto"
action="#{unidadeBean.adicionarUnd}" process="grid1"
update="tableUnidades grid1" />
</p:panelGrid>
<p:toolbar style="margin-bottom: 15px">
<p:toolbarGroup>
<p:commandButton value="Salvar"
action="#{unidadeBean.salvarUnidade}" process="@this tableUnidades"
update="@form" />
</p:toolbarGroup>
</p:toolbar>
<p:separator style="margin-top: 10px" />
<p:dataTable id="tableUnidades"
value="#{unidadeBean.bloco.unidades}" var="unidade" reflow="true"
emptyMessage="Não existem unidades cadastradas">
<p:column headerText="Unidade">
<h:outputText value="#{unidade.unidade}" />
</p:column>
<p:column headerText="Qtde. Moradores">
<h:outputText value="#{unidade.qtdeMorador}">
<f:convertNumber />
</h:outputText>
</p:column>
<p:column headerText="Bloco">
<h:outputText value="#{unidade.bloco}" converter="blocoConverter" />
</p:column>
</p:dataTable>
</h:form>
</div>
</ui:define>
</ui:composition>


