我对OmniFaces的FullAjaxExceptionHandler
如何与<p:commandButton>
提供的PrimeFaces actionListener
合作感到困惑。使用常规<h:commandButton>
,错误页面会正确显示,但是如果使用<p:commandButton>
,则不会发生任何事情,并且只会将异常记录到控制台。
我的环境:PrimeFaces 4.0,GlassFish 3.1.2.2,OmniFaces 1.6.3。
查看:
<h:form>
<p:commandButton actionListener="#{errorTester.throwRuntimeException}"
value="PrimeFaces" />
<h:commandButton value="JSF"
action="#{errorTester.throwRuntimeException}">
<f:ajax execute="@form" render="@form" />
</h:commandButton>
</h:form>
bean方法:
public void throwRuntimeException() {
throw new RuntimeException("peek-a-boo");
}
如何配置<p:commandButton>
以获取FullAjaxExceptionHandler
处理的异常?
答案 0 :(得分:1)
主要的错误是你(ab)使用actionListener
进行商业活动,而不是那样做。您应该使用action
。
<p:commandButton action="#{errorTester.throwRuntimeException}"
value="PrimeFaces" />
如果从actionListener
抛出异常,则将跳过所有剩余的actionListener
和action
,并且JSF将继续呈现响应。
据我所知,PrimeFaces展示的所有地方的商业行为被滥用actionListener
混乱,但你不应该以此为借口自己也这样做。