[ https://issues.apache.org/jira/browse/MYFACES-3199?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13058538#comment-13058538 ]
Martin Marinschek commented on MYFACES-3199: -------------------------------------------- Hi Martin, I totally agree with your point about listener isolation, however I see things a little differently (highlighting with _ added): 1) execute one listener in try catch block and catch (Exception e) 2) if 2a) exception is instance of APE _or any of the causes of the exception are an APE, don't_ publish ExceptionQueuedEvent and terminate processing for current event _(is this as such in the spec that an APE has to be queued?)_ 2b) for any other exception publish ExceptionQueuedEvent and continue broadcast processing 3) handle queued exception in exception handler 3a) default exception handler : ignore AbortProcessingException 3b) custom exception handler: can handle all unexpected exception (for example remove them from queue) 4) all unhandled exception are rethrow and error page is displayed > Handling AbortProcessingException is unconsistent > ------------------------------------------------- > > Key: MYFACES-3199 > URL: https://issues.apache.org/jira/browse/MYFACES-3199 > Project: MyFaces Core > Issue Type: Sub-task > Components: General > Environment: myface core trunk > Reporter: Martin Kočí > > UIViewRoot: > try { > source.broadcast(event); > } > catch (AbortProcessingException e) > { > ExceptionQueuedEventContext exceptionContext > = new ExceptionQueuedEventContext(context, e, source, > context.getCurrentPhaseId()); > context.getApplication().publishEvent(context, > ExceptionQueuedEvent.class, exceptionContext); > > // Abortion > return false; > } > Problem 1: > <h:inputText valueChangeListener="#{bean.processValueChange}"> > MethodExpressionValueChangeListener wraps all exceptions to > AbortProcessingException and therefore exception is queued > Problem 2: > <h:inputText > > <f:valueChangeListener binding="#{bean}" /> > </h:inputText> > ValueChangeListenerHandler does not wrap exception to > AbortProcessingException and therefore exception is not queued in this block > (but it is queued from phase executor but without component info) > Problem 3: JSF spec 2.1 : > "Clarification made: throwing an AbortProcessingException tells an > implementation that no further broadcast of the > current event occurs. Does not affect future events." > But I think that code in UIViewRoot makes opposite: // Abortion return > false; -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira