BackingBean Instanz

lernen.2007

Erfahrenes Mitglied
Hallo,

gibt es eine Möglichkeit den Instanz von Backing Bean aufzurufen? Wenn faces-config.xml legt ja immer eine Instanz von aufrufende Backing Bean ja an. Kann ich denn drauf zugreifen?

Danke
erkan
 
Habs nicht getestet, aber damit sollte es gehen:

Java:
/**
     * Get managed bean based on the bean name.
     *
     * @param beanName the bean name
     * @return the managed bean associated with the bean name
     */
    protected Object getManagedBean(String beanName) {
        return getValueBinding(getJsfEl(beanName)).getValue(facesContext);
    }

    private Application getApplication() {
        ApplicationFactory appFactory =
            (ApplicationFactory) FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);

        return appFactory.getApplication();
    }

    private ValueBinding getValueBinding(String el) {
        return getApplication().createValueBinding(el);
    }

    private String getJsfEl(String value) {
        return "#{" + value + "}";
    }

Edit:Nachtrag! An den FacesContext kommst Du so:

Java:
FacesContext facesContext = FacesContext.getCurrentInstance();
 
Zuletzt bearbeitet:
Hi erkan,

ich habe ein kleines Projekt geschrieben und bei mir funktioniert es wunderbar. Ich benutze Tomcat 6.0.10 und JSF 1.1.01. Dieses Projekt stellt eine kleine "LogonSeite" dar. Ein Benutzer kann sich anmelden wenn Benutzername und Kennwort gleich sind. Benutzername und Kennwort sind in der Bean "LogonForm" abgelegt. Die Testlogik ist in Der LogonAction Klasse. Letztere holt sich die FormBean via Value Binding.

Hier der Code:

Java:
package de.msg.logon;

import javax.faces.FactoryFinder;
import javax.faces.application.Application;
import javax.faces.application.ApplicationFactory;
import javax.faces.context.FacesContext;
import javax.faces.el.ValueBinding;

public class LogonAction {

	public String doLogin() {
		

		
		LogonForm form = (LogonForm) getManagedBean("LogonForm");
		
		// Benutzer einloggen, wenn Username = Password ;-)
		if (! form.getUser().equals(form.getPass())) 
			return "sucess";
		else
			return "failure";
		
		
	}

	/**
	 * * Get managed bean based on the bean name. * *
	 * 
	 * @param beanName
	 *            the bean name *
	 * @return the managed bean associated with the bean name
	 */
	protected Object getManagedBean(String beanName) {
		return getValueBinding(getJsfEl(beanName)).getValue(FacesContext.getCurrentInstance());
	}

	private Application getApplication() {
		ApplicationFactory appFactory = (ApplicationFactory) FactoryFinder
				.getFactory(FactoryFinder.APPLICATION_FACTORY);
		return appFactory.getApplication();
	}

	private ValueBinding getValueBinding(String el) {
		return getApplication().createValueBinding(el);
	}

	private String getJsfEl(String value) {
		return "#{" + value + "}";
	}
}

Java:
package de.msg.logon;

import java.io.Serializable;

public class LogonForm implements Serializable {

	private String user;
	private String pass;
	
	public LogonForm() {
		this.user = "";
		this.pass ="";
	}

	public String getPass() {
		return pass;
	} 

	public void setPass(String pass) {
		this.pass = pass;
	}

	public String getUser() {
		return user;
	}

	public void setUser(String user) {
		this.user = user;
	}
	
	/*public String doLogin(){
		String retval = "success";
		
		
		if (! getUser().equals(getPass())) retval = "failure";
		
		return retval;
	}*/
}

Hier die Faces-Config:
Code:
<!DOCTYPE faces-config PUBLIC
  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
  "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">

<!-- =========== FULL CONFIGURATION FILE ================================== -->

<faces-config>
	
	<navigation-rule>
		<from-view-id>/logon.jsp</from-view-id>
		<navigation-case>
			<from-outcome>success</from-outcome>
			<to-view-id>/erfolg.jsp</to-view-id>
		</navigation-case>
		<navigation-case>
			<from-outcome>failure</from-outcome>
			<to-view-id>/fehler.jsp</to-view-id>
		</navigation-case>
	</navigation-rule>
	
	

	<managed-bean>
		<managed-bean-name>LogonForm</managed-bean-name>
		<managed-bean-class>de.msg.logon.LogonForm</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
		<managed-property>
			<property-name>user</property-name>
			<value>Gast</value>
		</managed-property>
	</managed-bean>

	<managed-bean>
		<managed-bean-name>LogonAction</managed-bean-name>
		<managed-bean-class>de.msg.logon.LogonAction</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
	</managed-bean>

</faces-config>

Ich habe das komplette Projekt als Warfile hier abgelegt. Einfach nach WebApps kopieren, wenn Du auch tomcat benutzt. Alle Libs sind enthalten. Start mit http://localhost:8080/LogonWeb/index.jsp Das ausgepackte War ist ein Eclipse 3.2 Projekt. Wenn Du den Classpath anpasst, solltest Du darin rumspielen können.

Gruß
 
Zurück