# aktuelle Seite neu laden



## Smoothi (30. Jan 2012)

Ich möchte innerhalb des JavaCodes eine Seite neu laden.


```
FacesContext fc = FacesContext.getCurrentInstance();
fc.getApplication().getNavigationHandler().handleNavigation(fc, null, site + "?faces-redirect=true");
```

Damit navigier ich zur Zeit etwas umher. Das ist ja auch kein Problem...

Entweder ich bekomme nun heraus, was die aktuelle Seite ist, oder es gibt eine Art reload?!

Jemand eine Idee?


----------



## Sym (30. Jan 2012)

Führst Du das innerhalb einer Action aus? Du kannst Dir aus dem FacesContext auf den aktuellen Request holen und dort die Seite auslesen.


----------



## Smoothi (30. Jan 2012)

Nunja.. ich führ es innerhalb eines ValueChangeListeners durch.

Das Problem ist, dass ich bei einem SelectOneMenu (JSF) per Klick direkt weitergeleitet werde, ohne dass ich erst ein Knöpfchen drücken will.

Also ich wähle einen Eintrag aus, es wird der jeweilige Wert gesetzt und dann soll die Seite aktualisiert bzw. mit dem Wert neu geladen werden. 

Vielleicht seh ich den Wald vor lauter Bäumen nicht.

Ich habs versucht mit:

```
fc.getExternalContext().getRequest()
```

...aber damit lässt sich anscheinend nich viel machen

Hab jetzt auch keine Funktion gefunden, womit ich die aktuelle Seite bekomme :/

PS: hier scheint ein Fehler im Forum zu sein.
Der Titel ist: aktuelle Seite neu laden..
im ersten Beitrag steht: aktuelle aktuelle Seite neu laden 
und in der Threadübersicht steht: aktuelle Allgemeines EE


----------



## Sym (30. Jan 2012)

Du möchtest wirklich einen Redirect auf eine Seite machen oder nur die Seite aktualisieren?

Letzteres kannst Du in JSF über ein "render" lösen.

So ungefährt: 

[xml]<h:selectOneMenu ... >
    <f:ajax event="change" render="eineId" />                                    
</h:selectOneMenu>[/xml]


----------



## HimBromBeere (30. Jan 2012)

> Du möchtest wirklich einen Redirect auf eine Seite machen oder nur die Seite aktualisieren?


Was von der Netzwerklast aber keinerlei Unterschied machen dürfte, es wird hin wie her eine neue Anfrage an der Server gesendet und darauf basierend eine neue Seite erstellt.


----------



## Sym (30. Jan 2012)

HimBromBeere hat gesagt.:


> Was von der Netzwerklast aber keinerlei Unterschied machen dürfte, es wird hin wie her eine neue Anfrage an der Server gesendet und darauf basierend eine neue Seite erstellt.


Die Last ist auch nicht das wichtige. Aber es muss der richtige Scope gewählt werden, wenn ein richtiger Redirect gemacht wird.


----------



## Smoothi (31. Jan 2012)

Naja... im Endeffekt muss so viel aktualisiert werden, dass es schon günstig wär, wenn die gesamte Seite neu geladen wird. 

Ich glaube nicht, dass die Scope-Auswahl so entscheident is.. es arbeiten vllt maximal (!) 8-10 Leute gleichzeitig damit (wenn überhaupt) und die Anwendung läuft nur lokal. Zumal die Funktion nicht allzu häufig genutzt wird...


----------



## Smoothi (31. Jan 2012)

So, ich habe etwas experimentiert, was zumindest erstmal funktioniert... vllt gehts aber noch einfacher 


```
FacesContext fc = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) fc.getExternalContext().getRequest();
String uri = request.getRequestURI();
fc.getApplication().getNavigationHandler().handleNavigation(fc, null, uri.substring(uri.lastIndexOf("/")) + "?faces-redirect=true");
```


----------



## JimPanse (31. Jan 2012)

oder noch einfacher


```
FacesContext.getCurrentInstance().getExternalContext().redirect("<Seite>");
```


----------



## Smoothi (31. Jan 2012)

Danke, damit konnte ich es etwas kürzen:


```
FacesContext fc = FacesContext.getCurrentInstance();
        HttpServletRequest request = (HttpServletRequest) fc.getExternalContext().getRequest();
        fc.getExternalContext().redirect(request.getRequestURI());
```


----------

