从数据库中删除JSF异常

时间:2018-11-12 16:46:12

标签: java jpa jsf java-ee

我在JSF中处理异常时遇到问题。 当用户无法删除数据库中的条目时,我想在我的JSF页面上显示一条错误消息。

<h:message for="deleteButton"/>
<h:commandButton id="deleteButton" value="Delete"
action="#{filmView.deleteRow(film)}"  />

public void deleteRow(Film deleteTemp) {

    filmService.delete(deleteTemp.getFilmId());

}

public void delete(int id) {

    try {
        em.createQuery("delete from Film where film_id=" + id).executeUpdate();
    } catch (Exception e) {
        FacesContext.getCurrentInstance().addMessage("", new FacesMessage(
                "Removing dataset(ID:" + id + ") is not possible, because it's used in another dataset!"));
    }
}

因此有可能将此错误消息发送到JSF页面,如果可以的话,这会更好,因为我听说我现在是怎么做的,但这不是一个好的解决方案。

感谢您的帮助! 费利克斯

1 个答案:

答案 0 :(得分:1)

理想情况下,您的ManagedBean应该处理屏幕消息。

  1. 最好的方法是将错误从DAO抛出到服务层。

  2. 在服务层,您可以再次将其扔到ManagedBean并显示消息。


在FilmDAO.java上:

public void delete(int id) throws Exception {
    em.createQuery("delete from Film where film_id=" + id).executeUpdate();
}

在FilmService.java上:

public void delete(int id) throws Exception {
    filmDAO.delete(id);
}

在FilmMB.java上:

try {
    filmService.delete(id);
} catch (Exception e) {
    FacesContext.getCurrentInstance().addMessage("", 
            new FacesMessage("Removing dataset(ID:" + id + ") is not possible, 
                                                  because it's used in another dataset!"));
}