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 2013/04/25 18:19:03 UTC
svn commit: r1475840 - in /myfaces/core/trunk:
api/src/main/java/javax/faces/render/
impl/src/main/java/org/apache/myfaces/view/facelets/
impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/
Author: lu4242
Date: Thu Apr 25 16:19:02 2013
New Revision: 1475840
URL: http://svn.apache.org/r1475840
Log:
MYFACES-3714 - Implement stateless mode using f:view "transient" attribute
Modified:
myfaces/core/trunk/api/src/main/java/javax/faces/render/ResponseStateManager.java
myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java
myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/ViewHandler.java
Modified: myfaces/core/trunk/api/src/main/java/javax/faces/render/ResponseStateManager.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/render/ResponseStateManager.java?rev=1475840&r1=1475839&r2=1475840&view=diff
==============================================================================
--- myfaces/core/trunk/api/src/main/java/javax/faces/render/ResponseStateManager.java (original)
+++ myfaces/core/trunk/api/src/main/java/javax/faces/render/ResponseStateManager.java Thu Apr 25 16:19:02 2013
@@ -141,4 +141,15 @@ public abstract class ResponseStateManag
{
return null;
}
+
+ /**
+ * @since 2.2
+ * @param context
+ * @param viewId
+ * @return
+ */
+ public boolean isStateless(FacesContext context, String viewId)
+ {
+ return false;
+ }
}
Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java?rev=1475840&r1=1475839&r2=1475840&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java Thu Apr 25 16:19:02 2013
@@ -321,6 +321,18 @@ public class DefaultFaceletsStateManagem
throw new FacesException ("unable to create view \"" + viewId + "\"", e);
}
+ // Stateless mode only for transient views and non stateless mode for
+ // stateful views.
+ boolean statelessMode = manager.isStateless(context, viewId);
+ if (statelessMode && !view.isTransient())
+ {
+ throw new IllegalStateException("View is not transient");
+ }
+ if (!statelessMode && view.isTransient())
+ {
+ throw new IllegalStateException("Cannot apply state over stateless view");
+ }
+
if (state != null && state[1] != null)
{
states = (Map<String, Object>) state[1];
@@ -545,12 +557,12 @@ public class DefaultFaceletsStateManagem
return null;
}
- if (view.isTransient())
- {
+ //if (view.isTransient())
+ //{
// Must return null immediately per spec.
- return null;
- }
+ //return null;
+ //}
ExternalContext externalContext = context.getExternalContext();
@@ -930,13 +942,15 @@ public class DefaultFaceletsStateManagem
{
facesContext.getAttributes().remove(SKIP_ITERATION_HINT);
}
-
- Object state = uiViewRoot.saveState (facesContext);
- if (state != null)
+ if (!uiViewRoot.isTransient())
{
- // Save by client ID into our map.
-
- states.put (uiViewRoot.getClientId (facesContext), state);
+ Object state = uiViewRoot.saveState (facesContext);
+ if (state != null)
+ {
+ // Save by client ID into our map.
+
+ states.put (uiViewRoot.getClientId (facesContext), state);
+ }
}
}
Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/ViewHandler.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/ViewHandler.java?rev=1475840&r1=1475839&r2=1475840&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/ViewHandler.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/ViewHandler.java Thu Apr 25 16:19:02 2013
@@ -69,6 +69,9 @@ public final class ViewHandler extends T
@JSFFaceletAttribute
private final TagAttribute afterPhase;
+
+ @JSFFaceletAttribute(name="transient")
+ private final TagAttribute transientAttribute;
/**
* @param config
@@ -82,6 +85,7 @@ public final class ViewHandler extends T
this.encoding = this.getAttribute("encoding");
this.beforePhase = this.getAttribute("beforePhase");
this.afterPhase = this.getAttribute("afterPhase");
+ this.transientAttribute = this.getAttribute("transient");
}
/**
@@ -152,6 +156,10 @@ public final class ViewHandler extends T
MethodExpression m = this.afterPhase.getMethodExpression(ctx, null, LISTENER_SIG);
root.setAfterPhaseListener(m);
}
+ if (this.transientAttribute != null)
+ {
+ root.setTransient(this.transientAttribute.getBoolean(ctx));
+ }
}
this.nextHandler.apply(ctx, parent);
}