# JSF und AJAX - managedBean ist nicht im ServletContext



## Nicnac (25. Jul 2006)

Hallo,

ich versuche gerade, in meine JSF-Anwendung ein kleines Ajax-Feature einzubauen. 
Ich schreibe keine Komponente.

Ich habe ein AjaxServlet.java. In diesem muss ich an eine meiner managed-beans heran um dort Funktionen auszuführen. 

Ich habe es über den ServletContext (wie in dem Beispiel http://kafle.blogspot.com/2005/09/tutorial-using-ajax-in-jsf-application_27.html) versucht:


```
MeineBean meineBean = (MeineBean)getServletContext().getAttribute("meineBean "
```
);

Das geht aber nicht! In meinem Servlet-Context ist meine Bean nicht, und ich weiß nicht warum. Wie setze ich meine Bean in den ServletContext?

(Der FacesContext ist null, da ich mich im AjaxServlet befinde.Daher bekomme ich mein Bean also auch nicht.)

Vielen Dank für Eure Hilfe.
N.Schweighardt


----------



## Ralf Ueberfuhr (25. Jul 2006)

Ich bin seit 1.6. in der J2EE-Branche und habe auch festgestellt, dass AJAX und JSF nicht so einfach kombinierbar zu sein scheinen. Es gibt aber SF-Projekte wie ajax4jsf, die das beheben wollen.

Falls ich mich irre, dann bitte ich um Aufklärung.


----------



## Nicnac (25. Jul 2006)

Hi,

das kann gut sein, daß es mit (noch mehr) Frameworks oft einfacher ist, ich darf so etwas aber leider nicht benutzen.

Habe inzwischen eine Lösung gefunden, doch auf den FacesContext zuzugreifen. Sollte alles funktionieren, poste ich die Lösung hier.


Danke trotzdem.
Nicnac


----------



## Ralf Ueberfuhr (25. Jul 2006)

Ja, ich wäre brennend interessiert!


----------



## Nicnac (26. Jul 2006)

So... hier mein Servlet. Ich hoffe es hilft Dir weiter. Bei mir funktioniert es wunderbar.




```
...
public class AjaxServlet extends HttpServlet{
	
private ServletConfig servletConfig = null;
	
FacesContextFactory facesContextFactory;
Lifecycle lifecycle;

	public void destroy() {	
		servletConfig = null;
	}
	
	public ServletConfig getServletConfig() {	
		return (this.servletConfig);	
	}
	
	public String getServletInfo() {
		return (this.getClass().getName());
	}
	
	public void init(ServletConfig servletConfig) throws ServletException {
		this.servletConfig = servletConfig;
		

		ServletContext context = servletConfig.getServletContext();
		facesContextFactory = (FacesContextFactory) FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
		LifecycleFactory lifecycleFactory = (LifecycleFactory)		FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
		
                String lifecycleId = context.getInitParameter(FacesServlet.LIFECYCLE_ID_ATTR);
		
                if (lifecycleId == null) {
			lifecycleId = LifecycleFactory.DEFAULT_LIFECYCLE;
		}
		lifecycle = lifecycleFactory.getLifecycle(lifecycleId);
		
	}

	
	protected Object getBean(FacesContext context, String name) {
		return context.getApplication().getVariableResolver().resolveVariable(context, name);
	}
	
	public void doGet(HttpServletRequest request,HttpServletResponse response)throws java.io.IOException,ServletException {
		
		
		...
		FacesContext context = facesContextFactory.getFacesContext(servletConfig.getServletContext(),request, response, lifecycle);
		
		MyBean myBean = (MyBean )getBean(context,"myBean ");
		
	        ...


	}
	
	public void doPost(HttpServletRequest request,HttpServletResponse response)	throws java.io.IOException,ServletException {
		doGet(request, response);
	}
}
```

Wenn Du Spring benutzt und die Bean, die Du brauchst, eine SpringBean ist, kommst Du über den ApplicationContext dran:


```
//in der GET-Methode:
getBean("myBean");


public Object getBean(String name) {
        if (ctx == null) {
            ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
        }
        return ctx.getBean(name);
    }
```


Viele Grüße
Nicki


----------



## Guest (8. Dez 2006)

masseur81 hat gesagt.:
			
		

> Ich bin seit 1.6. in der J2EE-Branche und habe auch festgestellt, dass AJAX und JSF nicht so einfach kombinierbar zu sein scheinen. Es gibt aber SF-Projekte wie ajax4jsf, die das beheben wollen.
> 
> Falls ich mich irre, dann bitte ich um Aufklärung.


----------

