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.
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.
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);
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);
}
...
}
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.
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);
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