我正在开发一个应用程序,通常发生运行时异常(例如空指针异常)的 Portlet 将被替换为(在页面呈现/重新加载时)带有消息“Portlet 暂时禁用”的小框。但不知何故,我的应用程序不会因未捕获的错误而失败,而是将页面呈现为好像没有任何问题(同时将巨大的堆栈跟踪吐入控制台)。你可能想知道为什么这很糟糕。
我在按钮操作方法中犯了一个错误,导致NullPointerException
某个输入字段为空。在此操作方法中,一些信息被插入到数据库中。Web 表单无声无息地失败了,这就是我多按几次按钮的原因。然后我在输入字段中输入数据并再次按下按钮。现在动作处理程序方法不再抛出NullPointerException
。
然而,发生的事情是处理程序方法运行了 6 次(每次提交失败 + 1 次)。显然,ActionEvent
导致 NullPointerException 的 s 没有从操作队列中删除,它们在后续请求中被重新触发。如果应用程序确实被禁用,这不是问题。
谁能帮我这个?我需要让 portlet 在未捕获的异常上再次失败,或者在每个渲染响应阶段之后以某种方式清除 faces 事件队列。