0

我们目前正在使用 OmniFaces FullAjaxExceptionHandlerFactory 将应用程序中的任何异常重定向到一般错误页面。然后,此页面检查异常并确定其类型,以便我们可以针对某些已知错误情况显示特定(希望更有帮助)消息。

但是,在某些情况下,我们得到的只是没有附加原因或细节的 PropertyNotFoundException,而不是程序抛出的实际异常。这阻碍了我识别已知错误案例的尝试。

我弄清楚了发生这种情况的情况:我编写了一个复合组件,它封装了一个h:commandLink. 要传递我使用重定向的操作方法,如下所示:

<cc:attribute name="action" targets="link"  required="true" />

因此,

<h:commandLink id="link" value="test" />

这工作正常,但如上所述:如果操作在执行过程中偶然发现异常,则此原始异常将不会被交给错误页面。只有一个 PropertyNotFoundException 出现并告诉我,找不到操作方法 - 没有关于实际问题的任何信息。

我试图以不同的方式传递该方法,例如

<cc:attribute name="bean"   required="true" />
<cc:attribute name="method" required="true" />
<cc:attribute name="param" />

<h:commandLink  id="link"
                value="test"
                action="#{cc.attrs.bean[cc.attrs.method](cc.attrs.param)}" />

在这种情况下,我得到了正确的异常,但是对于使用页面未传递参数的情况,该方法失败。doSomething()然后将找不到类似的方法(IllegalArgumentException)。但是,我宁愿在整个应用程序中使用带有或不带参数的一个组件,而不是在此处针对不同的用途强制一些变通方法。

是否有其他方法可以避免重定向方法,或者我们可以更改某些内容,以便重定向方法不会导致无用的 PropertyNotFoundExecption?

编辑:如果可能的话,我更喜欢重定向,因为它对组件的使用限制较少。例如,上述替代方案仅允许具有一个参数的操作。:/

4

1 回答 1

0

根据评论,这是一个已知的 Mojarra 问题。我们升级到 Mojarra 2.1.21,我可以确认这个问题在这个版本中得到了修复,异常最终出现在界面中,并且按照代码的意图没有改变;)

谢谢您的帮助!

于 2013-06-04T18:15:23.497 回答