The ExternalContext#redirect()
takes an URL, a nie jako wynik nawigacji.
Musisz wrócić wyniki nawigacji z metod działania zadeklarowanych do zwrotu String
.
public String submit() {
// ...
return "from-outcome";
}
Można skonfigurować sprawę nawigację wysłać przekierowanie dodając <redirect>
.
<navigation-rule>
<navigation-case>
<from-outcome>from-outcome</from-outcome>
<to-view-id>/foo.xhtml</to-view-id>
<redirect>
<view-param>
<name>param</name>
<value>bar</value>
</view-param>
</redirect>
</navigation-case>
</navigation-rule>
pamiętać, że można również po prostu skorzystać z JSF niejawny nawigacji bez konieczności stosowania tego XML bałagan:
public String submit() {
// ...
return "/foo.xhtml?faces-redirect=true¶m=bar";
}
Jeśli jesteś wewnątrz metody detektora zdarzeń lub ajax, które nie mogą wrócić wynik ciąg, wtedy zawsze można pobrać NavigationHandler#handleNavigation()
, aby wykonać żądaną nawigację.
public void someEventListener(SomeEvent event) { // AjaxBehaviorEvent or ComponentSystemEvent or even just argumentless.
// ...
FacesContext context = FacesContext.getCurrentInstance();
NavigationHandler navigationHandler = context.getApplication().getNavigationHandler();
navigationHandler.handleNavigation(context, null, "from-outcome");
}
Nielegalny odpowiednik sprawy to: ExternalContext#redirect()
.
Dzięki @BalusC, ale w jaki sposób mogę zmodyfikować wartość w regule nawigacyjnej z komponentu bean? – timmornYE
Możesz użyć EL w '' tak jak, więc ' # {bean.param} '. Jest to równoważne "return" /foo.xhtml?faces-redirect=true¶m= "+ URLEncoder.encode (param," UTF-8 ");' (chociaż niektóre wersje Mojarra mają błędy z użyciem zestawu znaków). –
BalusC
Dzięki, rozumiem. Ale wracając do mojego pytania: Więc nie ma sposobu, aby użyć "reguła nawigacji" bez zwracania ciągu? Ponieważ są sytuacje, w których nie jest to możliwe. Co zrobić, jeśli chcę przekierować z połączenia Ajax? Nie mogę przywrócić nawigacji jako String lub czy jestem w błędzie? – timmornYE