You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by sk...@apache.org on 2008/11/07 16:16:36 UTC
svn commit: r712155 -
/myfaces/orchestra/trunk/flow/src/main/java/org/apache/myfaces/orchestra/flow/FlowViewHandler.java
Author: skitching
Date: Fri Nov 7 07:16:23 2008
New Revision: 712155
URL: http://svn.apache.org/viewvc?rev=712155&view=rev
Log:
Get rid of reflection stuff now that orchestra-flow requires JSF1.2 or later.
Modified:
myfaces/orchestra/trunk/flow/src/main/java/org/apache/myfaces/orchestra/flow/FlowViewHandler.java
Modified: myfaces/orchestra/trunk/flow/src/main/java/org/apache/myfaces/orchestra/flow/FlowViewHandler.java
URL: http://svn.apache.org/viewvc/myfaces/orchestra/trunk/flow/src/main/java/org/apache/myfaces/orchestra/flow/FlowViewHandler.java?rev=712155&r1=712154&r2=712155&view=diff
==============================================================================
--- myfaces/orchestra/trunk/flow/src/main/java/org/apache/myfaces/orchestra/flow/FlowViewHandler.java (original)
+++ myfaces/orchestra/trunk/flow/src/main/java/org/apache/myfaces/orchestra/flow/FlowViewHandler.java Fri Nov 7 07:16:23 2008
@@ -18,28 +18,14 @@
*/
package org.apache.myfaces.orchestra.flow;
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.util.Locale;
-
-import javax.faces.FacesException;
import javax.faces.application.ViewHandler;
+import javax.faces.application.ViewHandlerWrapper;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
-import org.apache.myfaces.orchestra.lib.OrchestraException;
-
/**
* Custom ViewHandler that executes the necessary logic to handle entering and exiting a Flow.
* <p>
- * Warning: this class is fragile when later JSF specifications add new methods. The method is then
- * not properly delegated and instead just falls back to the base class implementation. For upwards
- * compatibility, we could subclass from ViewHandlerWrapper - but that code would then fail to run
- * on JSF1.1. Ecch. This class therefore subclasses ViewHandler directly then adds implementations of
- * all methods added in JSF1.2, and uses reflection to invoke them on the underlying implementation.
- * This is of course not a "real" solution as there will be problems if a later JSF specification adds
- * more methods. But it does make this class work for both JSF1.1 and JSF1.2.
- * <p>
* Combining this class with other ViewHandlers can cause unexpected results, particularly when
* libararies in the classpath include faces-config.xml files that automatically register custom
* ViewHandler classes as in that case the order of ViewHandler nesting is hard to control. The most
@@ -47,44 +33,11 @@
* class only actually cares about the createView method, and Facelets does not do anything significant
* in its createView implementation.
*/
-public class FlowViewHandler extends ViewHandler
+public class FlowViewHandler extends ViewHandlerWrapper
{
- private static final Method CALC_CHAR_ENC_METHOD;
- private static final Method INIT_VIEW_METHOD;
-
private ViewHandler delegate;
/**
- * Static initialization block.
- */
- static
- {
- CALC_CHAR_ENC_METHOD = getMethodOpt(ViewHandler.class,
- "calculateCharacterEncoding",
- new Class[] {FacesContext.class});
-
- INIT_VIEW_METHOD = getMethodOpt(ViewHandler.class,
- "initView",
- new Class[] {FacesContext.class});
- }
-
- /**
- * If the specified class has a method with the specified name and params, return
- * it else return null.
- */
- private static Method getMethodOpt(Class clazz, String methodName, Class[] args)
- {
- try
- {
- return clazz.getMethod(methodName, args);
- }
- catch(NoSuchMethodException e)
- {
- return null;
- }
- }
-
- /**
* Constructor.
*/
public FlowViewHandler(ViewHandler delegate)
@@ -92,86 +45,10 @@
this.delegate = delegate;
}
- /**
- * Delegate to wrapped instance.
- * <p>
- * This method was added in JSF1.2. We must therefore use reflection
- * to invoke the method on the wrapped instance. Note that this method
- * is never invoked unless this is a JSF1.2 environment.
- */
- public java.lang.String calculateCharacterEncoding(FacesContext context)
- {
- try
- {
- Object ret = CALC_CHAR_ENC_METHOD.invoke(delegate, new Object[] {context});
- return (String) ret;
- }
- catch(Exception e)
- {
- throw new OrchestraException("Unable to invoke calculateCharacterEncoding on wrapped ViewHandler");
- }
- }
-
- /**
- * Delegate to wrapped instance.
- * <p>
- * This method was added in JSF1.2. We must therefore use reflection
- * to invoke the method on the wrapped instance. Note that this method
- * is never invoked unless this is a JSF1.2 environment.
- */
- public void initView(FacesContext context)
- throws FacesException
- {
- try
- {
- INIT_VIEW_METHOD.invoke(delegate, new Object[] {context});
- }
- catch(Exception e)
- {
- throw new OrchestraException("Unable to invoke initView on wrapped ViewHandler");
- }
- }
-
- /** Delegate to wrapped instance. */
- public Locale calculateLocale(FacesContext context)
- {
- return delegate.calculateLocale(context);
- }
-
- /** Delegate to wrapped instance. */
- public String calculateRenderKitId(FacesContext context)
- {
- return delegate.calculateRenderKitId(context);
- }
-
- /** Delegate to wrapped instance. */
- public String getActionURL(FacesContext context, String viewId)
- {
- return delegate.getActionURL(context, viewId);
- }
-
- /** Delegate to wrapped instance. */
- public String getResourceURL(FacesContext context, String path)
- {
- return delegate.getResourceURL(context, path);
- }
-
- /** Delegate to wrapped instance. */
- public void renderView(FacesContext context, UIViewRoot viewToRender) throws IOException, FacesException
- {
- delegate.renderView(context, viewToRender);
- }
-
- /** Delegate to wrapped instance. */
- public void writeState(FacesContext context) throws IOException
- {
- delegate.writeState(context);
- }
-
- /** Delegate to wrapped instance. */
- public UIViewRoot restoreView(FacesContext context, String viewId)
+ @Override
+ protected ViewHandler getWrapped()
{
- return delegate.restoreView(context, viewId);
+ return delegate;
}
/**