Author: craigmcc
Date: Thu Jan  5 20:54:44 2006
New Revision: 366429

URL: http://svn.apache.org/viewcvs?rev=366429&view=rev
Log:
Use VariableResolver instead of creating a value binding to instantiate
ViewController instances.  This avoids problems caused by an implementation
of ViewControllerMapper that might create view identifiers that are not
legal EL variable identifiers.

Also, per suggestion from Laurie Harper on the dev list, explicty catch
and report evaluation exceptions caused by this instantiation, to give
the developer a better shot at diagnosing what happened.

Modified:
    
struts/shale/trunk/core-library/src/java/org/apache/shale/faces/ShaleViewHandler.java
    
struts/shale/trunk/core-library/src/java/org/apache/shale/resources/Bundle.properties

Modified: 
struts/shale/trunk/core-library/src/java/org/apache/shale/faces/ShaleViewHandler.java
URL: 
http://svn.apache.org/viewcvs/struts/shale/trunk/core-library/src/java/org/apache/shale/faces/ShaleViewHandler.java?rev=366429&r1=366428&r2=366429&view=diff
==============================================================================
--- 
struts/shale/trunk/core-library/src/java/org/apache/shale/faces/ShaleViewHandler.java
 (original)
+++ 
struts/shale/trunk/core-library/src/java/org/apache/shale/faces/ShaleViewHandler.java
 Thu Jan  5 20:54:44 2006
@@ -26,7 +26,9 @@
 import javax.faces.application.ViewHandler;
 import javax.faces.component.UIViewRoot;
 import javax.faces.context.FacesContext;
+import javax.faces.el.EvaluationException;
 import javax.faces.el.ValueBinding;
+import javax.faces.el.VariableResolver;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -223,11 +225,11 @@
 
         // Retrieve an existing instance, or one created and configured by
         // the managed bean facility
-        ValueBinding vb =
-            context.getApplication().createValueBinding("#{" + viewName + "}");
         ViewController vc = null;
+        VariableResolver vr =
+            context.getApplication().getVariableResolver();
         try {
-            Object vcObject = vb.getValue(context);
+            Object vcObject = vr.resolveVariable(context, viewName);
             if (vcObject == null) {
                 log.warn(messages.getMessage("view.noViewController",
                                              new Object[] { viewId, viewName 
}));
@@ -237,6 +239,10 @@
         } catch (ClassCastException e) {
             log.warn(messages.getMessage("view.notViewController", 
                                          new Object[] { viewId, viewName }));
+            return;
+        } catch (EvaluationException e) {
+            log.warn(messages.getMessage("view.evalException",
+                                          new Object[] { viewId, viewName }), 
e);
             return;
         }
 

Modified: 
struts/shale/trunk/core-library/src/java/org/apache/shale/resources/Bundle.properties
URL: 
http://svn.apache.org/viewcvs/struts/shale/trunk/core-library/src/java/org/apache/shale/resources/Bundle.properties?rev=366429&r1=366428&r2=366429&view=diff
==============================================================================
--- 
struts/shale/trunk/core-library/src/java/org/apache/shale/resources/Bundle.properties
 (original)
+++ 
struts/shale/trunk/core-library/src/java/org/apache/shale/resources/Bundle.properties
 Thu Jan  5 20:54:44 2006
@@ -29,6 +29,7 @@
 filter.vcmInstantiate=ViewControllerMapper class {0} instance cannot be 
instantiated
 
 # org.apache.shale.application.ShaleViewHandler
+view.evalException=Evaluation exception creating a managed bean named {1} for 
viewId {0}
 view.notViewController=Bean for viewId {0} under name {1} is not a 
ViewController
 view.noViewController=No ViewController for viewId {0} found under name {1}
 view.noViewControllerMapper=No ViewControllerMapper has been configured for 
this application



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to