我有一个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;
}
尝试了一些搜索,我找到的所有搜索都没有,任何想法?感谢。
答案 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"));
}