Jak przekierować na inną stronę?

Jak przekierować na inną stronę za pomocą Wicket? IIRC, jakiś wyjątek trzeba wrzucić do konstruktora, ale nie pamiętam który. Z góry dzięki.

Author: Mot, 2010-07-26

5 answers

Rzucenie RestartResponseAtInterceptPageException zrobi to, jak zauważyłeś we własnej odpowiedzi, ale tak naprawdę jest to część systemu pozwalającego na przekierowanie z ewentualną kontynuacją na bieżącej stronie (często część procesu autoryzacji). Jeśli to nie jest Twoja sytuacja, ale nadal musisz zrobić coś, co przerywa przetwarzanie, może lepiej rzucić RestartResponseException.

Główne użycie, które znam dla RestartResponseAtInterceptPageException jest w procesie "przekierowanie na stronę logowania". Jeśli używasz role-based uwierzytelnianie, implementacja IAuthorizationStrategy po stwierdzeniu, że nie jesteś zalogowany, sygnalizuje skonfigurowaną IUnauthorizedComponentInstantiationListener, zazwyczaj AuthenticatedWebApplication, która wyrzuca ten wyjątek, jeśli nie jesteś zalogowany, z przekierowaniem na skonfigurowaną stronę logowania. (Jeśli jesteś zalogowany, ale nieautoryzowany, dzieje się coś innego...).

Rzeczywiste przekierowanie jest wykonywane przez PageMap, który również w tym przypadku pamięta stronę, na którą próbowałeś przejść. Po pomyślnym zalogowaniu strona logowania może poprosić o wysłanie cię na stronę początkowo próbowałeś wywołać continueToOriginalDestination(), która jest metodą w Component i pobiera zapamiętaną stronę z PageMap.

Istnieje dobry przykładowy kod dla tego procesu uwierzytelniania, ale wyjątek i przechwycenie ukrywają się nieco za kulisami.

 29
Author: Don Roby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-27 22:15:23

W przeciwieństwie do innych serwisów internetowych, w których nie ma dostępu do Internetu, nie ma dostępu do Internetu.]}

import org.apache.wicket.RestartResponseException;
import org.apache.wicket.request.mapper.parameter.PageParameters;
...
throw new RestartResponseException(
    TargetWicketPage.class, 
    new PageParameters().set("param1", "value1")); 
[[5]} przekierowanie na stronę z serwerem przekierowanie / forward (adres URL przeglądarki pozostaje niezmieniony):

Od 1.5RC5. 1:

import org.apache.wicket.RestartResponseException;
import org.apache.wicket.request.handler.PageProvider;
import org.apache.wicket.request.handler.RenderPageRequestHandler.RedirectPolicy;
import org.apache.wicket.request.mapper.parameter.PageParameters;
...
throw new RestartResponseException(
    new PageProvider(
        TargetWicketPage.class, 
        new PageParameters().set("param1", "value1")), 
    RedirectPolicy.NEVER_REDIRECT));

Przed bramką 1.5RC5.1:

import org.apache.wicket.request.RequestHandlerStack.ReplaceHandlerException;
import org.apache.wicket.request.handler.PageProvider;
import org.apache.wicket.request.handler.RenderPageRequestHandler;
import org.apache.wicket.request.handler.RenderPageRequestHandler.RedirectPolicy;
import org.apache.wicket.request.mapper.parameter.PageParameters;
...
throw new ReplaceHandlerException(
    new RenderPageRequestHandler(
        new PageProvider(
            TargetWicketPage.class, 
            new PageParameters().set("param1", "value1")), 
        RedirectPolicy.NEVER_REDIRECT), 
    true);
W tym celu należy wysłać wiadomość e-mail na adres .]}
import org.apache.wicket.request.flow.RedirectToUrlException;
...
throw new RedirectToUrlException("http://targetURL");
W związku z tym, że nie jest to możliwe, nie jest to możliwe.]}
import org.apache.wicket.request.flow.RedirectToUrlException;
import javax.servlet.http.HttpServletResponse;
...
throw new RedirectToUrlException("http://targetURL", 
    HttpServletResponse.SC_MOVED_PERMANENTLY);
 23
Author: sother,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-26 20:17:26

Szybkie wyszukiwanie wszystkich *Exception.java plików w wicket go ujawniło. Trzeba rzucić RestartResponseAtInterceptPageException:

public MyPage() {
   ...
   if (redirect) {
       throw new RestartResponseAtInterceptPageException(targetPage);
   }
   ...
}
 5
Author: Mot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-26 12:58:38

Właśnie znalazłem

getRequestCycle().setResponsePage(MyOtherPage.class);

Który działa co najmniej w wicket 6. Działa po stronie serwera i przepisuje również adres URL. Może jest to trochę szybsze niż użycie wyjątku.

 1
Author: user2081279,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-08 18:55:11

Możesz użyć

SetResponsePage (nowe przekierowanie("/"));

LUB

SetResponsePage (HomePage.class);

LUB

Throw new RestartResponseException (HomePage.class);

 0
Author: Shubham Pandey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-22 10:37:47