抛出异常后的FacesContext消息

时间:2014-05-18 01:53:35

标签: java jsf exception jsf-2 primefaces

我有一个try / catch块,在catch我发送消息,关于问题然后我抛出异常(阻止之后发生的一切,在这种情况下,我在业务规则方法中) ,我想避免托管bean方法中的所有内容)

好吧,如果我只发送消息它可以正常但不会阻止调用方法(调用具有实际trycatch的方法)

我真正拥有的是什么:

public void save() {
    ProdEN prod;
    if(prod.getId() == null) {
        prod = prodDB.insert(prod);
    } else {
        prod = prodDB.update(prod);
    }
    if(prod== null) {
        FacesUtil.addErrorMessage(MessageProvider.getMessage("error.save"));
    }
    FacesUtil.addInfoMessage(MessageProvider.getMessage("products.save.success"));
}

然后,调用的方法是:

public ProdEN insert(ProdEN prod) {
    try {
        beginTransaction();
        prod = (ProdEN) insert(prod, true);
        commitTransaction();
    } catch (Exception ex) {
        FacesUtil.addErrorMessage(MessageProvider.getMessage("error.save"));
        FacesContext.getCurrentInstance().responseComplete();
        throw ex;
    }
    return prod;
}

尝试了一些搜索,我找到的所有搜索都没有,任何想法?感谢。

1 个答案:

答案 0 :(得分:1)

它应该像这样工作。

对插入方法的更改。

您无需在此处添加错误消息。您也不需要返回prod对象。 Java改变了它的值。

public void insert(ProdEN prod) {
    try {
        beginTransaction();
        prod = (ProdEN) insert(prod, true);
        commitTransaction();
    } catch (Exception ex) {
        //FacesUtil.addErrorMessage(MessageProvider.getMessage("error.save"));
        //FacesContext.getCurrentInstance().responseComplete();
        throw ex;
    }
    //return prod;
}

现在是您的保存方法。

public void save() {
    ProdEN prod;
    try{
          if(prod.getId() == null) {
               prodDB.insert(prod);
               if(prod.getId()==null){
                FacesUtil.addErrorMessage(MessageProvider.getMessage("error.save"));
                return
               }
           } else {
              prod = prodDB.update(prod);
            }
    }catch(Exception e){
    FacesUtil.addErrorMessage(MessageProvider.getMessage("error.save"));
    return;
    }

    FacesUtil.addInfoMessage(MessageProvider.getMessage("products.save.success"));
}