actionMethods中的异常被封装在PropertyNotFoundException中



我们目前正在使用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)。但是,我更愿意在整个应用程序中使用一个组件(带或不带参数),而不是在这里为不同的用法强制使用一些变通方法。

是否有其他方法来避免重定向方法,或者我们可以改变一些东西,以便重定向方法不会导致无用的propertynotfoundexexception ?

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

根据评论,这是一个已知的Mojarra问题。我们升级到Mojarra 2.1.21,我可以确认这个问题在这个版本中得到了修复,异常最终会在接口中出现,就像代码预期的那样纯粹和不变;)

谢谢你的帮助!

相关内容

  • 没有找到相关文章

最新更新