我在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页面,如果可以的话,这会更好,因为我听说我现在是怎么做的,但这不是一个好的解决方案。
感谢您的帮助! 费利克斯
答案 0 :(得分:1)
理想情况下,您的ManagedBean应该处理屏幕消息。
最好的方法是将错误从DAO抛出到服务层。
在服务层,您可以再次将其扔到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!"));
}