I do 2 dates check plus is persisting

Asked

Viewed 44 times

0

I have a form, and before saving I want you to make a check that in case would be two dates. Only when a check is made it launches a Message until then OK. More ends up appearing another referent who managed to persist and ends up saving in the bank.

Follow my code.

My Bean

public void salvar() {
    try {
        this.servicoService.salvar(servico);
        Messages.addGlobalInfo("Serviço salvo com sucesso!");
        limpar();
    } catch (NegocioException e) {
        Messages.addGlobalError(e.getMessage());
        e.printStackTrace();
    } 
}

My Service

public void salvar(Servico servico) throws NegocioException {
    try {
         if (servico.getDiaServico().after(servico.getDiaGarantia())) {
            FacesUtil.addWarnMessage("A data do serviço, não pode ser maior do que a data da garantia.");
        }
        servicoDAO.salvar(servico);
    } catch (Exception e) {
        e.printStackTrace();
        throw new NegocioException("Não foi possível salvar o cliente!");
    }
}[![inserir a descrição da imagem aqui][1]][1]

1 answer

0

The problem is here:

try {
    if (servico.getDiaServico().after(servico.getDiaGarantia())) {
        FacesUtil.addWarnMessage("A data do serviço, não pode ser maior do que a data da garantia.");
    }
    servicoDAO.salvar(servico);
} 

The way it is, if the dates are invalid it only includes a Warning message and continues the normal flow. In this case, the next step of "normal flow" is servicoDAO.salvar(servico).

What you can do is, right after adding the error message, launch a Exception. Ex:

try {
    if (servico.getDiaServico().after(servico.getDiaGarantia())) {
        FacesUtil.addWarnMessage("A data do serviço, não pode ser maior do que a data da garantia.");
        throw new NegocioException("Não foi possível salvar o cliente!")
    }
    servicoDAO.salvar(servico);
} 

This way you ensure that the "normal flow" will be interrupted by the Exception.


Another thing, the way I said Exceptionwill be "duplicated" by which you capture any kind of Exception And that’s not cool. It’s not cool because it means you don’t have full domain of Exceptions that can come from the block try.

The correct way is to specialize the catches of Exceptions. Ex:

try {
    if (servico.getDiaServico().after(servico.getDiaGarantia())) {
        FacesUtil.addWarnMessage("A data do serviço, não pode ser maior do que a data da garantia.");
        throw new NegocioException("Não foi possível salvar o cliente POR PROBLEMA DE REGRA DE NEGOCIO!")
    }
    servicoDAO.salvar(servico);
} catch (DAOException e) { //partindo do principio que você tem uma Exception para a camada de DAO
    e.printStackTrace();
    throw new NegocioException("Não foi possível salvar o cliente POR ALGUM PROBLEMA NA CAMADA DE DAO / BANCO DE DADOS!");
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.