Boas galera!
Eu estou precisando muuito da ajuda de vcs pois tenho um problema aqui no trabalho que infelizmente, ou eu não consegui a lógica certa para resolver, ou não tem mesmo como fazer o que eu estou tentando, ou os 2 xD. É que eu sou novo nessa tecnologia e começei a pouco tempo com javaWeb.
Ok, vamos ao problema. Eu tenho que cadastrar uma determinada garagem para um prédio. Ao cadastrar a garagem eu posso ou não selecionar um veículo para ela. O problema é que um veículo só pode pertencer a uma garagem. Então ao cadastrar uma nova garagem, com um veículo já pertencente a outra, é gerada uma Exception. Quado eu clico no botão salvar, eu preciso verificar se a ação é salvar ou alterar, se for alterar eu exibo um modal panel ao usuário solicitando que ele confirme a alteração, caso o usuário confirme, o método salvar é chamado. Em seguida é feita a verificação se o veículo selecionado não está cadastrado em outra garagem. Caso o veículo esteja cadastrado em outra garagem deve ser exibido um outro modal panel ao usuário solicitando que ele escolha se deseja alterar a garagem do veículo ou não, caso o usuário confirme, a nova garagem deve ser relacionada ao veículo e não a anterior. Detalhe o relacionamento veículo - Garagem é 1:1. O problema é que eu tentei fazer de várias formas e não consegui, eu tentei fazer alguns ifs/elses no action também, mas não deu certo (tem como usar ifs nos actions?), eu gostaria de saber também se eu consigo chamar os Modais panels direto da classe garagemMB
Seguem os trechos de Códigos:
Aqui eu verifico se a ação é alteração ou inclusão
<a4j:commandButton value="Salvar"
value="Salvar" action="#{garagemMB.verificar}"
oncomplete="if (#{garagemMB.garagem.id > 0}) #{rich:component('confirmaAlteracao')}.show()" />
Aqui está o modal panel de confirmação de alteração
<rich:modalPanel id="confirmaAlteracao" width="350" height="100"
resizeable="false">
<f:facet name="header">
<h:panelGroup>
<h:outputText value="Confirmação de alteração"></h:outputText>
</h:panelGroup>
</f:facet>
<f:facet name="controls">
<h:panelGroup>
<h:graphicImage value="/images/modal/close.png"
styleClass="hidelinks" id="hidelinks" />
<rich:componentControl for="confirmaAlteracao" attachTo="hidelinks"
operation="hide" event="onclick" />
</h:panelGroup>
</f:facet>
<h:outputLabel value="Deseja realmente alterar a garagem?" />
<br />
<br />
<center><a4j:form>
<a4j:commandButton styleClass="botoes" value="Sim"
action="#{garagemMB.salvar}" reRender="grdGaragens"
oncomplete="#{rich:component('confirmaAlteracao')}.hide()" />
<a4j:commandButton styleClass="botoes" value="Não"
onclick="#{rich:component('confirmaAlteracao')}.hide()"
oncomplete="RichFaces.switchTab('abas','tabLista','Lista')"/>
</a4j:form></center>
</rich:modalPanel>
Aqui está o modal panel de confirmação de veículo (pergunta ao usuário se ele deseja alterar o veículo, para a garagem que está sendo cadastrada)
<rich:modalPanel id="confirmaGaragem" width="350" height="100"
resizeable="false">
<f:facet name="header">
<h:panelGroup>
<h:outputText value="Atenção"></h:outputText>
</h:panelGroup>
</f:facet>
<f:facet name="controls">
<h:panelGroup>
<h:graphicImage value="/images/modal/close.png"
styleClass="hidelinks" id="hidelinksGaragem" />
<rich:componentControl for="confirmaGaragem" attachTo="hidelinks"
operation="hide" event="onclick" />
</h:panelGroup>
</f:facet>
<h:outputLabel value="O veículo escolhido ja está cadastrado para outra garagem Deseja move-lo para a nova garagem?" />
<br />
<br />
<center><a4j:form>
<a4j:commandButton styleClass="botoes" value="Sim"
action="#{garagemMB.alterarVeiculo}"
oncomplete="#{rich:component('confirmaGaragem')}.hide()" />
<a4j:commandButton styleClass="botoes" value="Não"
onclick="#{rich:component('confirmaGaragem')}.hide()"
oncomplete="RichFaces.switchTab('abas','tabLista','Lista')"/>
</a4j:form></center>
</rich:modalPanel>
Estes são os métodos do meu ManagedBeam (garagemMB)
public String validarAcao() {
//verifica se ação é salvar ou alterar
if(garagem.getId() > 0){
return "false";//ação alterar
}
return "true";
}
//-----------Verificar
public String verificar() throws Exception{
System.out.println("Entrou no verificar");
for(Garagem garagem: GaragemDAO.listar()){
if(this.garagem.getVeiculo().getId()==garagem.getVeiculo().getId()&&garagem.getId()==this.garagem.getId()){
return "false";
}
}
salvar();
return "true";
}
//--------Salvar
public String salvar()
{
try{
garagemDAO = new GaragemDAO(garagem);
garagemDAO.salvar();
limparGaragem();
}catch(Exception e){ // erro ao salvar
e.printStackTrace();
garagemDAO.mostrarMensagem(e.toString(), null);
}
return refresh();
}
Agradeço desde já a ajuda