[ 
https://issues.apache.org/jira/browse/TRINIDAD-2038?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

hongbing wang updated TRINIDAD-2038:
------------------------------------

    Status: Patch Available  (was: Open)

> Need new exception to know whether JSF needs to report the exception
> --------------------------------------------------------------------
>
>                 Key: TRINIDAD-2038
>                 URL: https://issues.apache.org/jira/browse/TRINIDAD-2038
>             Project: MyFaces Trinidad
>          Issue Type: Bug
>    Affects Versions: 2.0.0-beta-1
>            Reporter: hongbing wang
>
> There are cases that exception is thrown in update model phase, like model 
> layer validation failure, by model outside of JSF and the exception is also 
> handled and reported outside of JSF. To avoid the component's local value 
> getting reset to null, JSF needs to be notified when it happens. The proposed 
> solution is to re-throw a special exception to JSF notify it and also let JSF 
> know whether it needs to report the exception.
> Here is the interface of the exception:
> package org.apache.myfaces.trinidad.context;
> /**
>  * Interface for exceptions that tells whether the exception needs to be 
> reported.
>  * If an exception is thrown during JSF lifycycle and already reported, then 
> it should let
>  * JSF know not to report it again.
>  *
>  */
> public interface Reportable
> {
>   
>   /**
>    * Return false if JSF doesn't need to report this exception, otherwise 
> true.
>    */
>   public boolean isReportingMessage();
>   
> }  
> Update UIXEditableValue.updateModel(FacesContext context) to take advantage 
> of this API as following
>   public void updateModel(FacesContext context)
>   {
>       ...
>       setValid(false);
>       // don't report the exception if the exception is a Reportable instance 
> and tells so
>       boolean isReportingMessage = (e instanceof Reportable) ?
>                                    ((Reportable) e).isReportingMessage() :
>                                    true;
>       if (isReportingMessage)
>       {
>         FacesMessage message = MessageFactory.getMessage(e);
>         message = _wrapMessage(message);
>         context.addMessage(getClientId(context), message);
>       }
>     }

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to