从 PhaseListener 添加消息
Posted
技术标签:
【中文标题】从 PhaseListener 添加消息【英文标题】:Add message from PhaseListener 【发布时间】:2012-08-13 07:45:01 【问题描述】:我基本上从通过 Primefaces AJAX 调用的 SQL 操作中得到了一些未捕获的异常。有趣的是,这个未捕获的异常在 FireBug 的 javascript 部分出现错误:
在 server.log 上包含所有堆栈跟踪和所有内容。
但如果不将用户重定向到单独的错误页面(并丢失所有输入数据),我无法将其引起用户注意。
创建验证器的正确方法是,我会这样做,但总是有可能出现不知情的数据库问题,只会出现在执行 SQL 操作。所以我只谈论没有验证者的情况。
假设我有这个 JSF sn-p。
还有 bean.save();
公共无效保存() 尝试 em.merge(this.data); 捕获(异常 e) // 即使由于某些破坏约束的原因无法合并数据,也从未在这里。如果出现数据库错误,我们将在事务结束(AFTER save())之前看到它,所以我无法捕捉到它。 (这已通过调试演练得到证实,并且在此处添加“em.flush()”可以使整个工作正常进行)。
左右看了之后,我创建了一个 PhaseListener 并且我能够得到异常。但是,我无法在
非常感谢任何建议。
【问题讨论】:
【参考方案1】:PhaseListener
不是处理异常的正确位置。您应该使用ExceptionHandler
。您需要在代码中进行的唯一其他更改是您应该使用Iterator
迭代异常并使用Iterator#remove()
从队列中删除已处理的异常。否则,它仍将由默认异常处理程序以您所看到的 ajax 响应的形式处理。
另见:
What is the correct way to deal with JSF 2.0 exceptions for AJAXified components?【讨论】:
以上是关于从 PhaseListener 添加消息的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Scala 中将元素添加到 Map 中,其中键是字符串,值是 List[String]