You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2010/01/31 23:26:21 UTC

svn commit: r905130 - in /myfaces/core/trunk/api/src: main/java/javax/faces/component/ main/java/javax/faces/component/behavior/ test/java/javax/faces/component/

Author: lu4242
Date: Sun Jan 31 22:26:20 2010
New Revision: 905130

URL: http://svn.apache.org/viewvc?rev=905130&view=rev
Log:
MYFACES-2342 New objects added for new api in UIViewRoot, UIComponent and UIComponentBase could be saved and restored

Modified:
    myfaces/core/trunk/api/src/main/java/javax/faces/component/UICommand.java
    myfaces/core/trunk/api/src/main/java/javax/faces/component/UIInput.java
    myfaces/core/trunk/api/src/main/java/javax/faces/component/_DeltaList.java
    myfaces/core/trunk/api/src/main/java/javax/faces/component/behavior/_DeltaList.java
    myfaces/core/trunk/api/src/test/java/javax/faces/component/_DeltaFacesListenerListTest.java

Modified: myfaces/core/trunk/api/src/main/java/javax/faces/component/UICommand.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/component/UICommand.java?rev=905130&r1=905129&r2=905130&view=diff
==============================================================================
--- myfaces/core/trunk/api/src/main/java/javax/faces/component/UICommand.java (original)
+++ myfaces/core/trunk/api/src/main/java/javax/faces/component/UICommand.java Sun Jan 31 22:26:20 2010
@@ -19,7 +19,6 @@
 package javax.faces.component;
 
 import javax.el.MethodExpression;
-import javax.el.ValueExpression;
 import javax.faces.context.FacesContext;
 import javax.faces.el.MethodBinding;
 import javax.faces.event.AbortProcessingException;
@@ -43,9 +42,6 @@
     public static final String COMPONENT_TYPE = "javax.faces.Command";
     public static final String COMPONENT_FAMILY = "javax.faces.Command";
 
-    private MethodExpression _actionExpression;
-    private MethodBinding _actionListener;
-
     /**
      * Construct an instance of the UICommand.
      */
@@ -177,12 +173,6 @@
         getStateHelper().put(PropertyKeys.value, value );
     }
 
-    private boolean _isSetActionExpression()
-    {
-        Boolean value = (Boolean) getStateHelper().get(PropertyKeys.actionExpressionSet);
-        return value == null ? false : value;
-    }
-
     /**
      * The action to take when this command is invoked.
      * <p>
@@ -196,35 +186,15 @@
      * is functionally equivalent to a reference to an action method that returns the string literal.
      * </p>
      */
-    @JSFProperty(stateHolder = true, returnSignature = "java.lang.Object", jspName = "action", clientEvent="action")
+    @JSFProperty(returnSignature = "java.lang.Object", jspName = "action", clientEvent="action")
     public MethodExpression getActionExpression()
     {
-        if (_actionExpression != null)
-        {
-            return _actionExpression;
-        }
-        ValueExpression expression = getValueExpression("actionExpression");
-        if (expression != null)
-        {
-            return (MethodExpression) expression.getValue(getFacesContext()
-                    .getELContext());
-        }
-        return null;
+        return (MethodExpression) getStateHelper().eval(PropertyKeys.actionExpression);
     }
 
     public void setActionExpression(MethodExpression actionExpression)
     {
-        this._actionExpression = actionExpression;
-        if (initialStateMarked())
-        {
-            getStateHelper().put(PropertyKeys.actionExpressionSet,Boolean.TRUE);
-        }
-    }
-    
-    private boolean _isSetActionListener()
-    {
-        Boolean value = (Boolean) getStateHelper().get(PropertyKeys.actionListenerSet);
-        return value == null ? false : value;
+        getStateHelper().put(PropertyKeys.actionExpression, actionExpression);
     }
 
     /**
@@ -236,20 +206,10 @@
      * 
      * @deprecated
      */
-    @JSFProperty(stateHolder = true, returnSignature = "void", methodSignature = "javax.faces.event.ActionEvent")
+    @JSFProperty(returnSignature = "void", methodSignature = "javax.faces.event.ActionEvent")
     public MethodBinding getActionListener()
     {
-        if (_actionListener != null)
-        {
-            return _actionListener;
-        }
-        ValueExpression expression = getValueExpression("actionListener");
-        if (expression != null)
-        {
-            return (MethodBinding) expression.getValue(getFacesContext()
-                    .getELContext());
-        }
-        return null;
+        return (MethodBinding) getStateHelper().eval(PropertyKeys.actionListener);
     }
 
     /**
@@ -258,11 +218,7 @@
     @JSFProperty(returnSignature="void",methodSignature="javax.faces.event.ActionEvent")
     public void setActionListener(MethodBinding actionListener)
     {
-        this._actionListener = actionListener;
-        if (initialStateMarked())
-        {
-            getStateHelper().put(PropertyKeys.actionListenerSet,Boolean.TRUE);
-        }
+        getStateHelper().put(PropertyKeys.actionListener, actionListener);
     }
 
     public void addActionListener(ActionListener listener)
@@ -291,148 +247,8 @@
     {
          immediate
         , value
-        , actionExpressionSet
-        , actionListenerSet
-    }
-
-    public void markInitialState()
-    {
-        super.markInitialState();
-        if (_actionListener != null && 
-            _actionListener instanceof PartialStateHolder)
-        {
-            ((PartialStateHolder)_actionListener).markInitialState();
-        }
-        if (_actionExpression != null && 
-            _actionExpression instanceof PartialStateHolder)
-        {
-            ((PartialStateHolder)_actionExpression).markInitialState();
-        }
-    }
-    
-    public void clearInitialState()
-    {
-        if (initialStateMarked())
-        {
-            super.clearInitialState();
-            if (_actionListener != null && 
-                _actionListener instanceof PartialStateHolder)
-            {
-                ((PartialStateHolder)_actionListener).clearInitialState();
-            }
-            if (_actionExpression != null && 
-                _actionExpression instanceof PartialStateHolder)
-            {
-                ((PartialStateHolder)_actionExpression).clearInitialState();
-            }
-        }
-    }
-
-    @Override
-    public Object saveState(FacesContext facesContext)
-    {
-        if (initialStateMarked())
-        {
-            boolean nullDelta = true;
-            Object parentSaved = super.saveState(facesContext);
-            Object actionListenerSaved = null;
-            if (!_isSetActionListener() &&
-                _actionListener != null && _actionListener instanceof PartialStateHolder)
-            {
-                //Delta
-                StateHolder holder = (StateHolder) _actionListener;
-                if (!holder.isTransient())
-                {
-                    Object attachedState = holder.saveState(facesContext);
-                    if (attachedState != null)
-                    {
-                        nullDelta = false;
-                    }
-                    actionListenerSaved = new _AttachedDeltaWrapper(_actionListener.getClass(),
-                        attachedState);
-                }
-            }
-            else  if (_isSetActionListener() || _actionListener != null)
-            {
-                //Full
-                actionListenerSaved = saveAttachedState(facesContext,_actionListener);
-                nullDelta = false;
-            }        
-            Object actionExpressionSaved = null;
-            if (!_isSetActionExpression() &&
-                _actionExpression != null && _actionExpression instanceof PartialStateHolder)
-            {
-                //Delta
-                StateHolder holder = (StateHolder) _actionExpression;
-                if (!holder.isTransient())
-                {
-                    Object attachedState = holder.saveState(facesContext);
-                    if (attachedState != null)
-                    {
-                        nullDelta = false;
-                    }
-                    actionExpressionSaved = new _AttachedDeltaWrapper(_actionExpression.getClass(),
-                        attachedState);
-                }
-            }
-            else  if (_isSetActionExpression() || _actionExpression != null)
-            {
-                //Full
-                actionExpressionSaved = saveAttachedState(facesContext,_actionExpression);
-                nullDelta = false;
-            }        
-            if (parentSaved == null && nullDelta)
-            {
-                //No values
-                return null;
-            }
-            
-            Object[] values = new Object[3];
-            values[0] = parentSaved;
-            values[1] = actionListenerSaved;
-            values[2] = actionExpressionSaved;
-            return values;
-        }
-        else
-        {
-            Object[] values = new Object[3];
-            values[0] = super.saveState(facesContext);
-            values[1] = saveAttachedState(facesContext,_actionListener);
-            values[2] = saveAttachedState(facesContext,_actionExpression);
-            return values;
-        }
-    }
-
-    @Override
-    public void restoreState(FacesContext facesContext, Object state)
-    {
-        if (state == null)
-        {
-            return;
-        }
-        
-        Object[] values = (Object[])state;
-        super.restoreState(facesContext,values[0]);
-        if (values[1] instanceof _AttachedDeltaWrapper)
-        {
-            //Delta
-            ((StateHolder)_actionListener).restoreState(facesContext, ((_AttachedDeltaWrapper) values[1]).getWrappedStateObject());
-        }
-        else
-        {
-            //Full
-            _actionListener = (javax.faces.el.MethodBinding) restoreAttachedState(facesContext,values[1]);
-        }         
-        if (values[2] instanceof _AttachedDeltaWrapper)
-        {
-            //Delta
-            ((StateHolder)_actionExpression).restoreState(facesContext, ((_AttachedDeltaWrapper) values[2]).getWrappedStateObject());
-        }
-        else
-        {
-            //Full
-            _actionExpression = (javax.el.MethodExpression) restoreAttachedState(facesContext,values[2]);
-        }         
+        , actionExpression
+        , actionListener
     }
 
     @Override

Modified: myfaces/core/trunk/api/src/main/java/javax/faces/component/UIInput.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/component/UIInput.java?rev=905130&r1=905129&r2=905130&view=diff
==============================================================================
--- myfaces/core/trunk/api/src/main/java/javax/faces/component/UIInput.java (original)
+++ myfaces/core/trunk/api/src/main/java/javax/faces/component/UIInput.java Sun Jan 31 22:26:20 2010
@@ -18,12 +18,12 @@
  */
 package javax.faces.component;
 
-import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFComponent;
-import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFProperty;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Map;
 
 import javax.el.ValueExpression;
 import javax.faces.FacesException;
-import javax.faces.application.Application;
 import javax.faces.application.FacesMessage;
 import javax.faces.context.ExternalContext;
 import javax.faces.context.FacesContext;
@@ -31,11 +31,18 @@
 import javax.faces.convert.ConverterException;
 import javax.faces.el.EvaluationException;
 import javax.faces.el.MethodBinding;
-import javax.faces.event.*;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.ExceptionQueuedEvent;
+import javax.faces.event.ExceptionQueuedEventContext;
+import javax.faces.event.FacesEvent;
+import javax.faces.event.PhaseId;
+import javax.faces.event.PostValidateEvent;
+import javax.faces.event.PreValidateEvent;
+import javax.faces.event.ValueChangeEvent;
+import javax.faces.event.ValueChangeListener;
 import javax.faces.render.Renderer;
-import javax.faces.validator.BeanValidator;
 import javax.faces.validator.Validator;
-import java.util.*;
+
 import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFComponent;
 import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFListener;
 import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFProperty;
@@ -70,11 +77,8 @@
 
     private static final Validator[] EMPTY_VALIDATOR_ARRAY = new Validator[0];
 
-    private MethodBinding _validator;
     private _DeltaList<Validator> _validatorList;
 
-    private MethodBinding _valueChangeListener;
-
     /**
      * Construct an instance of the UIInput.
      */
@@ -606,12 +610,6 @@
         getStateHelper().put(PropertyKeys.requiredMessage, requiredMessage );
     }
 
-    private boolean _isSetValidator()
-    {
-        Boolean value = (Boolean) getStateHelper().get(PropertyKeys.validatorSet);
-        return value == null ? false : value;
-    }
-
     /**
      * A method-binding EL expression which is invoked during the validation phase for this component.
      * <p>
@@ -626,19 +624,10 @@
      * @deprecated
      */
     @SuppressWarnings("dep-ann")
-    @JSFProperty(stateHolder = true, returnSignature = "void", methodSignature = "javax.faces.context.FacesContext,javax.faces.component.UIComponent,java.lang.Object")
+    @JSFProperty(returnSignature = "void", methodSignature = "javax.faces.context.FacesContext,javax.faces.component.UIComponent,java.lang.Object")
     public MethodBinding getValidator()
     {
-        if (_validator != null)
-        {
-            return _validator;
-        }
-        ValueExpression expression = getValueExpression("validator");
-        if (expression != null)
-        {
-            return (MethodBinding) expression.getValue(getFacesContext().getELContext());
-        }
-        return null;
+        return (MethodBinding) getStateHelper().eval(PropertyKeys.validator);
     }
 
     /** See getValidator.
@@ -647,11 +636,7 @@
      */
     public void setValidator(MethodBinding validator)
     {
-        this._validator = validator;
-        if (initialStateMarked())
-        {
-            getStateHelper().put(PropertyKeys.validatorSet,Boolean.TRUE);
-        }
+        getStateHelper().put(PropertyKeys.validator, validator);
     }
 
     /** See getValidator. */
@@ -703,12 +688,6 @@
         getStateHelper().put(PropertyKeys.validatorMessage, validatorMessage );
     }
 
-    private boolean _isSetValueChangeListener()
-    {
-        Boolean value = (Boolean) getStateHelper().get(PropertyKeys.valueChangeListenerSet);
-        return value == null ? false : value;
-    }
-
     /**
      * A method which is invoked during postback processing for the current view if the submitted value for this
      * component is not equal to the value which the "value" expression for this component returns.
@@ -718,19 +697,10 @@
      * 
      * @deprecated
      */
-    @JSFProperty(stateHolder = true, returnSignature = "void", methodSignature = "javax.faces.event.ValueChangeEvent", clientEvent="valueChange")
+    @JSFProperty(returnSignature = "void", methodSignature = "javax.faces.event.ValueChangeEvent", clientEvent="valueChange")
     public MethodBinding getValueChangeListener()
     {
-        if (_valueChangeListener != null)
-        {
-            return _valueChangeListener;
-        }
-        ValueExpression expression = getValueExpression("valueChangeListener");
-        if (expression != null)
-        {
-            return (MethodBinding) expression.getValue(getFacesContext().getELContext());
-        }
-        return null;
+        return (MethodBinding) getStateHelper().eval(PropertyKeys.valueChangeListener);
     }
 
     /**
@@ -740,11 +710,7 @@
      */
     public void setValueChangeListener(MethodBinding valueChangeListener)
     {
-        this._valueChangeListener = valueChangeListener;
-        if (initialStateMarked())
-        {
-            getStateHelper().put(PropertyKeys.valueChangeListenerSet,Boolean.TRUE);
-        }
+        getStateHelper().put(PropertyKeys.valueChangeListener, valueChangeListener);
     }
 
     /**
@@ -831,10 +797,10 @@
         , required
         , converterMessage
         , requiredMessage
-        , validatorSet
+        , validator
         , validatorListSet
         , validatorMessage
-        , valueChangeListenerSet
+        , valueChangeListener
         , valid
         , localValueSet
         , submittedValue
@@ -843,21 +809,11 @@
     public void markInitialState()
     {
         super.markInitialState();
-        if (_validator != null && 
-            _validator instanceof PartialStateHolder)
-        {
-            ((PartialStateHolder)_validator).markInitialState();
-        }
         if (_validatorList != null && 
             _validatorList instanceof PartialStateHolder)
         {
             ((PartialStateHolder)_validatorList).markInitialState();
         }
-        if (_valueChangeListener != null && 
-            _valueChangeListener instanceof PartialStateHolder)
-        {
-            ((PartialStateHolder)_valueChangeListener).markInitialState();
-        }
     }
     
     public void clearInitialState()
@@ -865,21 +821,11 @@
         if (initialStateMarked())
         {
             super.clearInitialState();
-            if (_validator != null && 
-                _validator instanceof PartialStateHolder)
-            {
-                ((PartialStateHolder)_validator).clearInitialState();
-            }
             if (_validatorList != null && 
                 _validatorList instanceof PartialStateHolder)
             {
                 ((PartialStateHolder)_validatorList).clearInitialState();
             }
-            if (_valueChangeListener != null && 
-                _valueChangeListener instanceof PartialStateHolder)
-            {
-                ((PartialStateHolder)_valueChangeListener).clearInitialState();
-            }
         }
     }    
 
@@ -888,76 +834,24 @@
     {
         if (initialStateMarked())
         {
-            boolean nullDelta = true;
             Object parentSaved = super.saveState(facesContext);
-            Object validatorSaved = null;
-            if (!_isSetValidator() &&
-                _validator != null && _validator instanceof PartialStateHolder)
-            {
-                //Delta
-                StateHolder holder = (StateHolder) _validator;
-                if (!holder.isTransient())
-                {
-                    Object attachedState = holder.saveState(facesContext);
-                    if (attachedState != null)
-                    {
-                        nullDelta = false;
-                    }
-                    validatorSaved = new _AttachedDeltaWrapper(_validator.getClass(),
-                        attachedState);
-                }
-            }
-            else if (_isSetValidator() || _validator != null)
-            {
-                //Full
-                validatorSaved = saveAttachedState(facesContext,_validator);
-                nullDelta = false;
-            }        
-            Object valueChangeListenerSaved = null;
-            if (!_isSetValueChangeListener() &&
-                _valueChangeListener != null && _valueChangeListener instanceof PartialStateHolder)
-            {
-                //Delta
-                StateHolder holder = (StateHolder) _valueChangeListener;
-                if (!holder.isTransient())
-                {
-                    Object attachedState = holder.saveState(facesContext);
-                    if (attachedState != null)
-                    {
-                        nullDelta = false;
-                    }
-                    valueChangeListenerSaved = new _AttachedDeltaWrapper(_valueChangeListener.getClass(),
-                        attachedState);
-                }
-            }
-            else  if (_isSetValueChangeListener() || _valueChangeListener != null)
-            {
-                //Full
-                valueChangeListenerSaved = saveAttachedState(facesContext,_valueChangeListener);
-                nullDelta = false;
-            }        
-            
             Object validatorListSaved = saveValidatorList(facesContext);
-            if (parentSaved == null && validatorListSaved == null && nullDelta)
+            if (parentSaved == null && validatorListSaved == null)
             {
                 //No values
                 return null;
             }
             
-            Object[] values = new Object[4];
+            Object[] values = new Object[2];
             values[0] = parentSaved;
-            values[1] = validatorSaved;
-            values[2] = valueChangeListenerSaved;
-            values[3] = validatorListSaved;
+            values[1] = validatorListSaved;
             return values;
         }
         else
         {
-            Object[] values = new Object[4];
+            Object[] values = new Object[2];
             values[0] = super.saveState(facesContext);
-            values[1] = saveAttachedState(facesContext,_validator);
-            values[2] = saveAttachedState(facesContext,_valueChangeListener);
-            values[3] = saveValidatorList(facesContext);
+            values[1] = saveValidatorList(facesContext);
             return values;
         }
     }
@@ -976,37 +870,17 @@
         if (values[1] instanceof _AttachedDeltaWrapper)
         {
             //Delta
-            ((StateHolder)_validator).restoreState(facesContext, ((_AttachedDeltaWrapper) values[1]).getWrappedStateObject());
-        }
-        else
-        {
-            //Full
-            _validator = (javax.faces.el.MethodBinding) restoreAttachedState(facesContext,values[1]);
-        }         
-        if (values[2] instanceof _AttachedDeltaWrapper)
-        {
-            //Delta
-            ((StateHolder)_valueChangeListener).restoreState(facesContext, ((_AttachedDeltaWrapper) values[2]).getWrappedStateObject());
-        }
-        else
-        {
-            //Full
-            _valueChangeListener = (javax.faces.el.MethodBinding) restoreAttachedState(facesContext,values[2]);
-        }
-        if (values[3] instanceof _AttachedDeltaWrapper)
-        {
-            //Delta
             if (_validatorList != null)
             {
                 ((StateHolder)_validatorList).restoreState(facesContext,
-                        ((_AttachedDeltaWrapper) values[3]).getWrappedStateObject());
+                        ((_AttachedDeltaWrapper) values[1]).getWrappedStateObject());
             }
         }
-        else if (values[3] != null || !initialStateMarked())
+        else if (values[1] != null || !initialStateMarked())
         {
             //Full
             _validatorList = (_DeltaList<Validator>)
-                restoreAttachedState(facesContext,values[3]);
+                restoreAttachedState(facesContext,values[1]);
         }
     }
     

Modified: myfaces/core/trunk/api/src/main/java/javax/faces/component/_DeltaList.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/component/_DeltaList.java?rev=905130&r1=905129&r2=905130&view=diff
==============================================================================
--- myfaces/core/trunk/api/src/main/java/javax/faces/component/_DeltaList.java (original)
+++ myfaces/core/trunk/api/src/main/java/javax/faces/component/_DeltaList.java Sun Jan 31 22:26:20 2010
@@ -285,7 +285,10 @@
                 {
                     //Full
                     lst[i] = UIComponentBase.saveAttachedState(context, value);
-                    nullDelta = false;
+                    if (value instanceof StateHolder || value instanceof List)
+                    {
+                        nullDelta = false;
+                    }
                 }
             }
             if (nullDelta)

Modified: myfaces/core/trunk/api/src/main/java/javax/faces/component/behavior/_DeltaList.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/component/behavior/_DeltaList.java?rev=905130&r1=905129&r2=905130&view=diff
==============================================================================
--- myfaces/core/trunk/api/src/main/java/javax/faces/component/behavior/_DeltaList.java (original)
+++ myfaces/core/trunk/api/src/main/java/javax/faces/component/behavior/_DeltaList.java Sun Jan 31 22:26:20 2010
@@ -288,7 +288,10 @@
                 {
                     //Full
                     lst[i] = UIComponentBase.saveAttachedState(context, value);
-                    nullDelta = false;
+                    if (value instanceof StateHolder || value instanceof List)
+                    {
+                        nullDelta = false;
+                    }
                 }
             }
             if (nullDelta)

Modified: myfaces/core/trunk/api/src/test/java/javax/faces/component/_DeltaFacesListenerListTest.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/test/java/javax/faces/component/_DeltaFacesListenerListTest.java?rev=905130&r1=905129&r2=905130&view=diff
==============================================================================
--- myfaces/core/trunk/api/src/test/java/javax/faces/component/_DeltaFacesListenerListTest.java (original)
+++ myfaces/core/trunk/api/src/test/java/javax/faces/component/_DeltaFacesListenerListTest.java Sun Jan 31 22:26:20 2010
@@ -486,4 +486,31 @@
         assertTrue(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
         assertFalse(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener1));
     }
+    
+    
+    public void testComplexSaveRestore1()
+    {
+        UITestComponent a = new UITestComponent();
+        UITestComponent b = new UITestComponent();
+        FacesListener listener1 = new NoStateFacesListener();
+        StateFacesListener listener2 = new PartialStateFacesListener();
+        StateFacesListener listener3 = new StateFacesListener();
+        a.addFacesListener(listener1);
+        a.addFacesListener(listener2);
+        a.addFacesListener(listener3);
+        b.addFacesListener(listener1);
+        b.addFacesListener(listener2);
+        b.addFacesListener(listener3);
+        a.markInitialState();
+        b.markInitialState();
+        //Since listener1 is transient
+        Object [] savedState1 = (Object[]) a.saveState(facesContext);
+        b.restoreState(facesContext, savedState1);  
+        assertTrue(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
+        assertTrue(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener2));
+        assertTrue(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener3));
+        assertTrue(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener1));
+        assertTrue(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener2));
+        assertTrue(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener3));
+    }
 }