Fórum Ajuda com código - criação de método #554306
21/05/2016
0
Estou implementado uma aplicação web, mas sou novata em Java e estou tendo dificuldades em criar um determinado método. A aplicação permite criar seguros para um cliente. Terminada a validade do seguro, o mesmo pode ser renovado para mais um ano. Para isso, o método "renovar" precisa alterar o status do seguro em questão de "Aberto" para "Encerrado" e adicionar um novo registro com o tipo de proposta "Renovação" e um novo período de vigência. Quando um seguro é cadastrado pela primeira vez, seu tipo de proposta é "Seguro Novo". Toda vez que o cliente desejar renovar o seguro, um novo registro deve ser acrescentado com o tipo de proposta "Renovação" e uma nova validade.
Minha intenção é criar um botão "Renovar" na página de consulta de seguros para que o método seja executado automaticamente, adicionando um novo registro à lista de seguros, sem que o usuário tenha que acessar a página de cadastro do seguro para alterar o tipo de proposta e o período de vigência manualmente. No momento, o que eu consegui fazer foi apenas substituir o tipo de proposta e o status do segur, sem adicionar um novo registro e manter o anterior. O escopo do bean é "Request". Será que alguém poderia me dar uma ajuda nisso?
Obrigada.
Segue código:
SeguroRN
public String salvar(Seguro s) {
Integer codigo = s.getCodigo();
String tipoproposta = s.getTipoproposta().getDescricao();
if (codigo == null || codigo == 0) {
this.seguroDao.salvar(s);
}
if (codigo != 0 && tipoproposta.contains("Renovação")) {
this.seguroDao.salvar(s);
} else {
this.seguroDao.atualizar(s);
}
return null;
}
SeguroBean
public void renovar() {
this.seguro.setStatus("Encerrado");
this.seguro.setTipoproposta(TipoProposta.Renovacao);
SeguroRN seguroRN = new SeguroRN();
seguroRN.salvar(this.seguro);
}
Sgrandini
Curtir tópico
+ 0Posts
24/05/2016
Renan Di
Gostei + 0
25/05/2016
Sgrandini
Eu até consegui fazer com que fosse verificado se o Id já existe ou não, acrescentando a condição "tipoproposta.contains("Renovação")" para que fosse feita a inserção de um novo registro ao invés de apenas atualizar o já existente. Isso está no método salvar da classe SeguroRN que eu postei acima. O problema é que, para que essas duas condições fossem aceitas e o método "salvar" (e não o "atualizar") fosse chamado, tive que primeiro setar o tipo da proposta para "Renovação" no método "renovar" do bean. Aí é que está o meu erro, pois do jeito que coloquei o atributo "tipo de proposta" deixa de ser "Seguro Novo" para ser substituído por "Renovação", e não é isso que eu quero. Quero manter como "Seguro Novo", alterar apenas o status para "Encerrado" e aí sim inserir um novo registro como "Renovação" e status "Aberto", além de colocar um novo período de vigência.
Entendi a sua sugestão. Só não sei como implementar o que você disse, ou seja, copiar os atributos do primeiro, deixando o Id nulo e o status como "Encerrado" e então passar pra ele o método "salvar". Também não estou conseguindo inserir um novo período de vigência adicionando um ano. Sei que não deve ser algo difícil de fazer, mas como estou começando a programar em Java estou tendo essa dificuldade toda.
Gostei + 0
26/05/2016
Renan Di
O que eu quis dizer com copiar foi o seguinte, o seu objeto que precisa ser alterado como você já sabe deve ser substituído por outro com os mesmos atributos daí você só precisa fazer o seguinte:
Crie um novo objeto chamando o construtor padrão sem atributos, neste novo objeto set todos os atributos recuperados do primeiro objeto não esquecendo de quando recuperar o vencimento antigo substituir ou calcular você que sabe, o novo vencimento, não dar um Id ou gerar um novo id diferente do anterior e no objeto antigo mudar o status para encerrado e colocar no novo o status para Renovação, basicamente é isso.
Objeto novo = new Objeto();
novo.setAtributo1 = velho.getAtributo1;
novo.setAtributo2 = velho.getAtributo2;
e etc...
novo,setId = gerar id como você achar melhor, ou até mesmo deixar o BD gerar pra você passando null aqui;
velho.setStatus = "Encerrado";
novo.setStatus = "Renocação";
Acho que agora você deve entender melhor o passo a passo, basicamente o problema ai está mesmo é na modelagem, desculpa por ter colocado tudo como Objeto pois não lembrei o nome da sua class na hora de escreve rsrsrs. Se tiver mais dúvidas pode continuar perguntando.
Gostei + 0
28/05/2016
Sgrandini
Outra coisa, não sei se é por causa do escopo (Request) que estou utilizando no bean, mas depois do método "renovar" ser executado a página "consulta de seguros" não é atualizada com o novo registro. Preciso dar um F5 para o registro aparecer. Como faço pra resolver isso?
Obrigada.
Gostei + 0
29/05/2016
Renan Di
Método clone em Java
Reflection em Java
public void renovar() {
this.seguro.setStatus("Encerrado");
this.seguro.setTipoproposta(TipoProposta.Renovacao);
SeguroRN seguroRN = new SeguroRN();
seguroRN.salvar(this.seguro);
}
Dentro do seu método existe a chamada this.seguro logo você tem um atributo da classe do tipo seguro, e é diretamente dele que você preenche os campos na tela, após o método salvar o seu atributo de class seguro continua apontando pra o seguro velho e deveria receber agora a instância do novo seguro para ter seus valores atualizados, além de salvar a alteração feita no seguro antigo:
this.seguro.salvar(this.segur); this.seguro = seguroRN; this.seguro.salvar(this.segur);
Ou seja, você deve salvar os dois para alteração ter efeito no banco e depois trocar as instâncias velha pela nova para a alteração ter efeito na tela. Espero que faça sentido na sua classe já que desconheço a implementação mas acho que faz sentido pelo que você me disse.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)