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));
+ }
}