I make the verification of 2 more dates is persisting

0

I have a form, and before saving I want you to do a check that in this case would be two dates. However, when a check is made, it will send a message until it is 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]
    
asked by anonymous 30.03.2017 / 19:13

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);
} 

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

What you can do is, right after you add the error message, cast 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 guarantee that the "normal flow" will be interrupted by Exception .

Something else, in the way you said Exception s will be "duplicated" because you catch any kind of Exception and this is not legal. It's not cool because it means that you do not have full control of Exception s that can come from block try .

The correct way is to specialize the% s of% s. 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!");
}
    
30.03.2017 / 19:24