Note that there are some explanatory texts on larger screens.

plurals
  1. POSession scoped managed bean not available in servlet when using another browser than IE
    text
    copied!<p>I have been using the following bit of code in a servlet to locate a session backing bean (as suggested by BalusC) without problems until recently. Now it only works on Internet Explorer. Chrome and Firefox appear to be getting a totally new backing bean rather than the original backing bean. When calling functions in the backing bean, it falls over with null pointer errors for objects in the backing bean that were definitely initialized in the original. </p> <pre><code>FacesContext facesContext = FacesUtil.getFacesContext(req, res); ProductSelection productSelection = (ProductSelection) facesContext.getApplication().evaluateExpressionGet(facesContext, "#{productSelection}", ProductSelection.class); if(productSelection.getProductType() == null) { System.out.println("Sevlet: product type is NULL; did not get the original backing bean"); } else { System.out.println("Sevlet: product type is: " + productSelection.getProductType().getProductTypeName()); } </code></pre> <p>It is a while since I tested this code and there have been several updates to Java but I'm not sure if these are the cause; I have changed something in my configuration or Chrome and Firefox have changed something in their code (unlikely). Is anyone else having similar problems? I am at a loss as to where to go from here, as there does not appear to be any errors associated with not finding the backing bean and my debugging skills for the java lib code are not that great (they don't comment their code very well and it is hard to follow); any suggestions would be greatly appreciated.</p> <p>I am using Netbeans 7.01, JSF 2.0, Glassfish 3.1, and a Derby database. I tested it on my tower and laptop and it is doing it on both (Win XP and Win 7). The JRE is 7 update 40 build 1.7.0_40-b43. JDK is 1.6.0_04. Chrome version is 29.0.1547.76 m. Firefox is 23.0.1. Internet Explorer is 8.0.6001.18702.</p> <p>The FacesUtil is slightly different to BalusC's code (but it was working fine):</p> <pre><code> package searchselection; import javax.faces.FactoryFinder; import javax.faces.component.UIViewRoot; import javax.faces.context.FacesContext; import javax.faces.context.FacesContextFactory; import javax.faces.lifecycle.Lifecycle; import javax.faces.lifecycle.LifecycleFactory; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; // By BalusC http://balusc.blogspot.com // Utility to get the FacesContext. // Used by the CriteriaServlet to get the backing bean when the user submits a customised // search criteria object. public class FacesUtil { // Getters ----------------------------------------------------------------- // public static FacesContext getFacesContext(ServletRequest request, ServletResponse response) { // Get current FacesContext. FacesContext facesContext = FacesContext.getCurrentInstance(); // Check current FacesContext. if (facesContext == null) { // Create new Lifecycle. LifecycleFactory lifecycleFactory = (LifecycleFactory) FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY); Lifecycle lifecycle = lifecycleFactory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE); // Create new FacesContext. FacesContextFactory contextFactory = (FacesContextFactory) FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY); facesContext = contextFactory.getFacesContext( request.getServletContext(), request, response, lifecycle); // Create new View. UIViewRoot view = facesContext.getApplication().getViewHandler().createView( facesContext, ""); facesContext.setViewRoot(view); // Set current FacesContext. FacesContextWrapper.setCurrentInstance(facesContext); } return facesContext; } // Helpers ----------------------------------------------------------------- // Wrap the protected FacesContext.setCurrentInstance() in a inner class. private static abstract class FacesContextWrapper extends FacesContext { protected static void setCurrentInstance(FacesContext facesContext) { FacesContext.setCurrentInstance(facesContext); } } } </code></pre> <p>Kind thanks in advance... </p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload