Boa tarde!
Estou com uma dúvida e preciso da ajuda dos colegas mais experientes aqui no GUJ.
Sou relativamente “novato” com JEE, fiz o FJ25 e o FJ26 na Caelum ( o melhor curso que eu já fiz, sem demagogia ), e até agora ia tudo bem até que me deparei com a seguinte necessidade:
Estou desenvolvendo um sistema com diversos tipos de “Cadastros” e tudo ia bem até eu precisar “relacionar” um item de uma tabela para exibir em outra, explico melhor:
Tenho um cadastro específico para “UNIDADE LOTAÇÃO”, tem somente o ID, o número da unidade e a descrição da unidade.
Em outra tela que chamo de “COLABORADOR”, eu pretendo selecionar a “unidade lotação” a qual este ‘colaborador’ será cadastrado. O problema está exatamente aí, tenho um botão ao lado do Campo que abre um dialog, neste dialog eu tenho a dataTable com os registros das unidades e ao lado de cada unidade, tem um outro botão que deveria selecionar esta unidade e devolve-la para a tela COLABORADOR.
Quando eu clico no botão para selecionar a Unidade Lotação, ela fecha o dialog e não exibe nada nos campos aonde deveriam estar o número da unidade e a descrição da unidade.
Peço ajuda pois estou a dias tentando e tentando sem sucesso.
Tela colaborador.xhtml
<h2 style="color: #ffffff; padding-top: 20px;">Listagem de
Colaboradores</h2>
<h:form id="formColaborador"></h:form>
<h:form id="tabelaColaborador">
<p:dataTable id="tabColaborador" var="colaborador"
value="#{colaboradorBean.colaboradores}" scrollRows="20"
scrollable="true" scrollHeight="auto" resizableColumns="true"
style="margin-bottom:0px; width: 98%; margin-left: 1%"
emptyMessage="Nenhum colaborador encontrado." paginator="true">
<f:facet name="header">
<h:commandButton value="Nova"
onclick="PF('formularioColaborador').show();" type="button" />
</f:facet>
<p:column scrollable="true" width="15">
<h:commandLink onclick="PF('formularioColaborador').show()">
<p:graphicImage name="imagens/edit.png" />
<f:setPropertyActionListener value="#{colaborador}"
target="#{colaboradorBean.colaborador}" />
<f:ajax render=":formColaborador" />
</h:commandLink>
</p:column>
<p:column id="idcolaborador" filterBy="#{tabColaborador.id}">
<h:outputText value="#{tabColaborador.id}" />
</p:column>
<p:column headerText="Empresa" scrollable="true" resizable="true"
scrollWidth="50%" width="300">
#{colaborador.empresa}
</p:column>
<p:column headerText="Estabelecimento"
sortBy="#{colaborador.estabelecimento}" scrollable="true"
width="300">
#{colaborador.estabelecimento}
</p:column>
<p:column headerText="Matricula" sortBy="#{colaborador.matricula}"
scrollable="true" width="100">
#{colaborador.matricula}
</p:column>
<p:column headerText="Nome" sortBy="#{colaborador.nome}"
scrollable="true" width="200">
#{colaborador.nome}
</p:column>
<p:column headerText="Centro de Custo" scrollable="true"
width="100">
#{colaborador.centroCusto}
</p:column>
<p:column headerText="Descrição C. Custo" scrollable="true"
width="200">
#{colaborador.descricaoCentroCusto}
</p:column>
<p:column headerText="Unidade Lotacao" scrollable="true"
width="150">
#{colaborador.unidadeLotacao}
</p:column>
<p:column headerText="Descrição" scrollable="true" width="250">
<!-- #{colaborador.descricao} -->
</p:column>
<p:column headerText="Data Admissão" scrollable="true" width="100"
mask="99/99/9999">
#{colaborador.dataAdmissao}
</p:column>
<p:column headerText="Descrição Cargo" scrollable="true"
width="150">
#{colaborador.descricaoCargo}
</p:column>
<p:column headerText="Referência" scrollable="true" width="120">
#{colaborador.referencia}
</p:column>
<p:column headerText="Data Nascimento" scrollable="true"
width="100" mask="99/99/9999">
#{colaborador.dataNascimento}
</p:column>
<p:column headerText="RG" scrollable="true" width="100">
#{colaborador.rg}
</p:column>
<p:column headerText="Órgão Emissor" scrollable="true" width="85">
#{colaborador.orgaoEmissor}
</p:column>
<p:column headerText="UF" scrollable="true" width="25">
#{colaborador.uf}
</p:column>
<p:column headerText="Data Emissão" scrollable="true" width="100"
mask="99/99/9999">
#{colaborador.dataEmissao}
</p:column>
<p:column headerText="CPF" scrollable="true" width="120"
mask="999.999.999-99">
#{colaborador.cpf}
</p:column>
<p:column headerText="Status" scrollable="true" width="80">
#{colaborador.status}
</p:column>
</p:dataTable>
</h:form>
<p:dialog id="formDialog" widgetVar="formularioColaborador"
resizable="false" modal="true" syte="width: 70%; height:60%;"
appendTo="@(body)">
<h:form id="formColab">
<p:growl id="msgs" showDetail="true" />
<h2 style="color: gray;">
<h:outputText value="Novo Colaborador"
rendered="#{empty colaboradorBean.colaborador.id}" />
<h:outputText value="Editar Colaborador"
rendered="#{!empty colaboradorBean.colaborador.id}" />
</h2>
<div style="width: 450px; height: 100%;">
<p:panel id="basic" header="Dados do Colaborador"
style="text-align: center" styleClass="centered">
<!-- <h:inputHidden value="#{colaboradorBean.colaborador.id}" /> -->
<div class="ui-g">
<div class="ui-g-12">
<p:inputText value="#{colaboradorBean.colaborador.empresa}"
placeholder="Empresa" size="52" />
</div>
<div class="ui-g-12">
<p:inputText
value="#{colaboradorBean.colaborador.estabelecimento}"
placeholder="Estabelecimento" size="52" />
</div>
<div class="ui-g-12">
<p:inputText value="#{colaboradorBean.colaborador.matricula}"
placeholder="Matricula" size="52" />
</div>
<div class="ui-g-12">
<p:inputText value="#{colaboradorBean.colaborador.nome}"
placeholder="Nome" size="52" />
</div>
<div class="ui-g-8" align="left">
<p:inputText
value="#{colaboradorBean.colaborador.descricaoCentroCusto}"
placeholder="Descrição C. Custo" size="32" />
</div>
<div class="ui-g-4">
<p:inputText value="#{colaboradorBean.colaborador.centroCusto}"
placeholder="Centro de Custo" size="12" />
</div>
<div class="ui-g-8" align="left">
<p:inputText id="descricao"
placeholder="Descrição Unidade Lotação" size="32"
value="#{unidadeLotacaoBean.unidadeLotacao.descricaoUnidadeLotacao}"
readonly="#{facesContext.currentPhaseId.name eq 'RENDER_RESPONSE'}" />
</div>
<div class="ui-g-4">
<p:inputText id="colaborador" placeholder="Unid. Lotação"
size="8"
value="#{unidadeLotacaoBean.unidadeLotacao.numeroUnidadeLotacao}"
readonly="#{facesContext.currentPhaseId.name eq 'RENDER_RESPONSE'}" />
<p:spacer width="3px" />
<p:commandButton icon="ui-icon-search" title="Pesquisa"
action="#{unidadeLotacaoBean.abrirDialogo}" process="@this"
update="@none"
style="width:22px; height: 21px; background: gray; border-color: gray; border: 0px">
<p:ajax event="dialogReturn"
listener="#{colaboradorBean.unidadeLotacaoSelecionada}"
process="@this" update="descricao, colaborador" />
<p:resetInput target="descricao, colaborador" />
</p:commandButton>
</div>
<div class="ui-g-8" align="left">
<p:inputText
value="#{colaboradorBean.colaborador.descricaoCargo}"
placeholder="Descroção Cargo" size="32" />
</div>
<div class="ui-g-4">
<p:inputMask
value="#{colaboradorBean.colaborador.dataAdmissao}"
placeholder="Data Admissão" size="12" mask="99/99/9999" />
</div>
<div class="ui-g-8">
<p:inputText value="#{colaboradorBean.colaborador.referencia}"
placeholder="Referência" size="32" />
</div>
<div class="ui-g-4">
<p:inputMask
value="#{colaboradorBean.colaborador.dataNascimento}"
placeholder="Data Nascimento" size="12" mask="99/99/9999" />
</div>
<div class="ui-g-4">
<p:inputText value="#{colaboradorBean.colaborador.rg}"
placeholder="RG" size="12" />
</div>
<div class="ui-g-5">
<p:inputMask
value="#{colaboradorBean.colaborador.orgaoEmissor}"
placeholder="Órgão Emissor" size="15" />
</div>
<div class="ui-g-3" align="left">
<p:selectOneMenu id="uf"
value="#{colaboradorBean.colaborador.uf}" required="true"
label="UF">
<f:selectItem itemLabel="UF" itemValue=""
noSelectionOption="true" />
<f:selectItem itemLabel="AC" itemValue="AC" />
<f:selectItem itemLabel="AL" itemValue="AL" />
<f:selectItem itemLabel="AP" itemValue="AP" />
<f:selectItem itemLabel="AM" itemValue="AM" />
<f:selectItem itemLabel="BA" itemValue="BA" />
<f:selectItem itemLabel="CE" itemValue="CE" />
<f:selectItem itemLabel="DF" itemValue="DF" />
<f:selectItem itemLabel="ES" itemValue="ES" />
<f:selectItem itemLabel="GO" itemValue="GO" />
<f:selectItem itemLabel="MA" itemValue="MA" />
<f:selectItem itemLabel="MT" itemValue="MT" />
<f:selectItem itemLabel="MS" itemValue="MS" />
<f:selectItem itemLabel="MG" itemValue="MG" />
<f:selectItem itemLabel="PA" itemValue="PA" />
<f:selectItem itemLabel="PB" itemValue="PB" />
<f:selectItem itemLabel="PR" itemValue="PR" />
<f:selectItem itemLabel="PE" itemValue="PE" />
<f:selectItem itemLabel="PI" itemValue="PI" />
<f:selectItem itemLabel="RJ" itemValue="RJ" />
<f:selectItem itemLabel="RN" itemValue="RN" />
<f:selectItem itemLabel="RS" itemValue="RS" />
<f:selectItem itemLabel="RO" itemValue="RO" />
<f:selectItem itemLabel="RR" itemValue="RR" />
<f:selectItem itemLabel="SC" itemValue="SC" />
<f:selectItem itemLabel="SP" itemValue="SP" />
<f:selectItem itemLabel="SE" itemValue="SE" />
<f:selectItem itemLabel="TO" itemValue="TO" />
</p:selectOneMenu>
</div>
<div class="ui-g-4">
<p:inputMask value="#{colaboradorBean.colaborador.dataEmissao}"
placeholder="Data Emissão" size="12" mask="99/99/9999" />
</div>
<div class="ui-g-5">
<p:inputMask value="#{colaboradorBean.colaborador.cpf}"
placeholder="CPF" size="15" mask="999.999.999-99" />
</div>
<div class="ui-g-3">
<p:selectOneMenu id="status"
value="#{colaboradorBean.colaborador.status}" required="true"
label="Status" size="10">
<f:selectItem itemLabel=" Status " itemValue=""
noSelectionOption="true" />
<f:selectItem itemLabel="Ativo" itemValue="Ativo" />
<f:selectItem itemLabel="Inativo" itemValue="Inativo" />
</p:selectOneMenu>
</div>
<div class="ui-g-6" align="center">
<h:commandButton value="Gravar"
action="#{colaboradorBean.grava}" />
</div>
<div class="ui-g-6" align="center">
<h:commandButton value="Cancelar" action="colaborador"
immediate="true" />
</div>
</div>
</p:panel>
</div>
</h:form>
</p:dialog>
</ui:define>
</ui:composition>
SelecionaLotacao.xhtml
<p:panel id="basic" header="Selecione a Unidade Lotação"
style="text-align: center" styleClass="centered">
<div
style="text-align: left; padding-left: 20px; padding-bottom: 8px;">
<p:inputText id="unidade" value="#{unidadeLotacaoBean.unidade}"
placeholder="Descrição Unidade Lotação" size="50" />
<p:spacer width="20px" />
<h:commandButton value="Pesquisar"
action="#{unidadeLotacaoBean.pesquisar}" update="@form" />
</div>
<p:dataTable value="#{unidadeLotacaoBean.unidadesLotacao}"
var="lotacao" emptyMessage="Nenhuma Unidade Lotação encontrada"
rows="15" paginator="true" paginatorPosition="bottom">
<p:column headerText="Nº Unidade Lotação"
style="text-align: center; width: 150px">
<h:outputText value="#{lotacao.numeroUnidadeLotacao}" />
</p:column>
<p:column headerText="Descrição Unidade Lotação"
style="text-align: left">
<h:outputText value="#{lotacao.descricaoUnidadeLotacao}" />
</p:column>
<p:column style="width:30px">
<p:commandButton icon="ui-icon-check" title="Selecionar"
action="#{unidadeLotacaoBean.selecionar(unidadeLotacao)}"
process="@this"
style="width:22px; height: 17px; background: gray; border-color: gray; border: 0px" />
</p:column>
</p:dataTable>
</p:panel>
unidadeLotacaoBean
@Named
@RequestScoped
public class UnidadeLotacaoBean {
@Inject
private UnidadeLotacaoDao dao;
private String unidade;
private UnidadeLotacao unidadeLotacao = new UnidadeLotacao();
private List<UnidadeLotacao> unidadesLotacao;
public UnidadeLotacao getUnidadeLotacao() {
return this.unidadeLotacao;
}
public void setUnidadeLotacao(UnidadeLotacao unidadeLotacao) {
this.unidadeLotacao = unidadeLotacao;
}
public void setUnidadesLotacao(List<UnidadeLotacao> unidadesLotacao) {
this.unidadesLotacao = unidadesLotacao;
}
public String getUnidade() {
return unidade;
}
public void setUnidade(String unidade) {
this.unidade = unidade;
}
public void pesquisar() {
unidadesLotacao = dao.buscaPorDescricao(unidade);
}
public void selecionar(UnidadeLotacao unidadeLotacao) {
RequestContext.getCurrentInstance().closeDialog(unidadeLotacao);
System.out.println("Selecionou a UL" + unidadeLotacao);
}
public List<UnidadeLotacao> getUnidadesLotacao() {
if (unidadesLotacao == null) {
System.out.println("Carregando a lista de Unidade Lotacao...");
unidadesLotacao = dao.listaTodos();
}
return unidadesLotacao;
}
@Transacional
public String grava() throws InterruptedException {
System.out.println("Gravando a Unidade Lotação...");
if (unidadeLotacao.getId() == null) {
dao.adiciona(unidadeLotacao);
} else {
dao.atualiza(unidadeLotacao);
}
this.unidadeLotacao = new UnidadeLotacao();
this.unidadesLotacao = dao.listaTodos();
return "unidadelotacao?faces-redirect=true";
}
@Transacional
public void remove(UnidadeLotacao unidadeLotacao) throws InterruptedException {
dao.remove(unidadeLotacao);
this.unidadesLotacao = dao.listaTodos();
}
public void cancelar() {
this.unidadeLotacao = new UnidadeLotacao();
}
public void abrirDialogo() {
Map<String, Object> opcoes = new HashMap<>();
opcoes.put("modal", true);
opcoes.put("resizable", false);
opcoes.put("contentHeight", 355);
RequestContext.getCurrentInstance().openDialog("selecionalotacao", opcoes, null);
}
}
colaboradorBean
@Named
@RequestScoped
public class ColaboradorBean {
@Inject
private ColaboradorDao dao;
@Inject
private UnidadeLotacaoDao ulDao;
private String unidade;
private List<UnidadeLotacao> unidadesLotacao;
private Colaborador colaborador = new Colaborador();
private List<Colaborador> colaboradores;
public void unidadeLotacaoSelecionada(SelectEvent event) {
UnidadeLotacao unidadeLotacao = (UnidadeLotacao) event.getObject();
colaborador.setUnidadeLotacao(unidadeLotacao);
}
public Colaborador getColaborador() {
return this.colaborador;
}
public void setColaborador(Colaborador colaborador) {
this.colaborador = colaborador;
}
public void setColaboradores(List<Colaborador> colaboradores) {
this.colaboradores = colaboradores;
}
public List<Colaborador> getColaboradores() {
if (colaboradores == null) {
System.out.println("Carregando Colaboradores...");
colaboradores = dao.listaTodos();
}
return colaboradores;
}
@Transacional
public String grava() throws InterruptedException {
System.out.println("Gravando os Colaboradores...");
if (colaborador.getId() == null) {
dao.adiciona(colaborador);
} else {
dao.atualiza(colaborador);
}
this.colaborador = new Colaborador();
this.colaboradores = dao.listaTodos();
return "colaborador?faces-redirect=true";
}
@Transacional
public void remove(Colaborador colaborador) throws InterruptedException {
dao.remove(colaborador);
this.colaboradores = dao.listaTodos();
}
public void cancelar() {
this.colaborador = new Colaborador();
}
public void comecaComMaiuscula(FacesContext fc, UIComponent component, Object value) throws ValidationException {
String valor = value.toString();
if (!valor.matches("[A-a].*")) {
throw new ValidatorException(new FacesMessage("Deveria começar com maiúscula"));
}
}
public String getUnidade() {
return unidade;
}
public void setUnidade(String unidade) {
this.unidade = unidade;
}
public void pesquisar() {
unidadesLotacao = ulDao.buscaPorDescricao(unidade);
}
}
Alguém consegue me ajudar pessoal??
Estou precisando muito de ajuda!
Não sei se postei na categoria correta, mas ninguém responde o que é “aparentemente” simples ( para quem sabe ).
Obrigado!!

