# JSF: Mit BenutzerId auf Nutzerdaten zugreifen



## Henrik (10. Okt 2007)

Hallo,

ich möchte gerne das man mit hilfe der BenutzerId auf eine Seite des Benutzer kommt. Also der Link wär zum Beispiel  
	
	
	
	





```
[url]http://localhost:8080/vtr_admin/pages/change-customer-details.jsf?id=9308[/url]
```

und man soll dann auf eine Seite kommen auf der man die Beutzer Daten des Benutzer ändern kann. 

Jetzt hab ich das ganze mit Parameter übergabe gemacht so: 


```
<managed-bean>
		<managed-bean-name>changeCustomerDetailHandler</managed-bean-name>
		<managed-bean-class>
			com.vesseltracker.admin.search.CustomerDetailHandler
		</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
		<managed-property>
			<property-name>
			customerId</property-name>
			<property-class>int</property-class>
			<value>#{param.id}</value>
		</managed-property>
	</managed-bean>
```

Aber ich hab jetzt das Problem das wohl der Parameter nicht die ganze Session über gespeichert wird (siehe Fehlermeldung), gibt es andere wege das zu machen ?

Fehlermeldung:


```
type Exception report

message

descriptionThe server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: The scope of the referenced object: #{param.id} is shorter than the referring object

root cause

javax.faces.FacesException: The scope of the referenced object: #{param.id} is shorter than the referring object
```

lg

Henrik


----------



## maki (10. Okt 2007)

Muss die id denn im Link drinstehen?


----------



## Henrik (10. Okt 2007)

Was sein muß ist das man von auserhalb auf einen Link klicken kann und dann direkt zu dem Nutzer mit der ID kommt.


----------



## maki (10. Okt 2007)

Hmm.. nach dem ich gegoogelt habe, bin ich der Meinung, das man keine Managed-Bean Properties mit dem Scope session über URL Parameter direkt setzen kann. 

Du müsstest in deiner Bean Action den Wert rausfinden und die Property manuell setzen:

```
String id = (String) FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id");
```
Oder so ähnlich...


----------



## Henrik (11. Okt 2007)

mmh danke, so einen ähnlich lösung hab ich auch gefunden, aber so wirklich gefällt mir das nicht, gibt es keine andere lösung bei der man direkt einen Link zu einer Benutzerseite hat wo man auch Daten editieren kann ?


----------



## maki (11. Okt 2007)

Das problem ist nicht der link, die Daten dürfen schon in der URL stehen ("?name=wert&name2=wert2"), aber es darf nicht so in die Bean config eingetragen werden:

```
<managed-bean-scope>session</managed-bean-scope>
      <managed-property>
         <property-name>
         customerId</property-name>
         <property-class>int</property-class>
         <value>#{param.id}</value>
      </managed-property>
```
denn da die Bean ja session scope hat, müsste param.id *immer* mitgeliefert werden, und das geht eben nicht.

Anstatt die property in der config standardmässig mit dem param.id zu verknüpfen, musst du das Manuell in der aufgerufenen action machen, aber natürlich nur beim ersten Aufruf


----------



## Henrik (12. Okt 2007)

Aber setzt eine Action nicht immer vorraus das man von einem jsf link kommt (also commandLink) und nicht von auserhalb (also irgendein link den jeder von überall öffnen kann) ?


----------

