redireccionar redireccionador pagina otra index con boton automaticamente abrir java redirect wicket

java - redireccionador - Wicket: ¿cómo redirigir a otra página?



redireccionar php (5)

Acabo de encontrar

getRequestCycle().setResponsePage(MyOtherPage.class);

que funciona al menos en wicket 6. Funciona en el lado del servidor y también reescribe la URL. Tal vez es un poco más rápido que usar una excepción.

¿Cómo redirecciono a otra página usando Wicket? IIRC, alguna excepción tiene que ser lanzada en el constructor, pero no recuerdo cuál. Gracias por adelantado.


Redirigir a una página wicket, utilizando un redireccionamiento del cliente (HTTP 302, la URL del navegador cambia):

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

Redirigir a una página wicket, utilizando un servidor de redirección / reenvío (la URL del navegador permanece sin cambios):

Desde Wicket 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));

Antes de Wicket 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);

Redirigir a una URL, usando HTTP 302 ("Movido temporalmente"):

import org.apache.wicket.request.flow.RedirectToUrlException; ... throw new RedirectToUrlException("http://targetURL");

Redirecciona a una URL, usando HTTP 301 ("Movido permanentemente", optimizado para SEO):

import org.apache.wicket.request.flow.RedirectToUrlException; import javax.servlet.http.HttpServletResponse; ... throw new RedirectToUrlException("http://targetURL", HttpServletResponse.SC_MOVED_PERMANENTLY);


Una búsqueda rápida de todos los archivos *Exception.java en wicket lo reveló. Uno tiene que lanzar un RestartResponseAtInterceptPageException :

public MyPage() { ... if (redirect) { throw new RestartResponseAtInterceptPageException(targetPage); } ... }


puedes usar

setResponsePage (nueva RedirectPage ("/"));

o

setResponsePage (HomePage.class);

o

lanzar new RestartResponseException (HomePage.class);


Lanzar un RestartResponseAtInterceptPageException lo hará, como anotó en su propia respuesta, pero eso es realmente parte de un sistema que permite una redirección con una posible continuación en la página actual (con frecuencia parte de un proceso de autorización). Si esa no es su situación, pero aún tiene que hacer algo que interrumpa el procesamiento, podría ser mejor RestartResponseException una RestartResponseException .

El uso principal que conozco de RestartResponseAtInterceptPageException encuentra en el proceso de "redirigir a la página de inicio de sesión". Si usa la autenticación basada en roles, una implementación de IAuthorizationStrategy al determinar que no ha iniciado sesión indicará un IUnauthorizedComponentInstantiationListener configurado, generalmente la aplicación AuthenticatedWebApplication que arroja esta excepción si no ha iniciado sesión, con un redireccionamiento a una configuración página de inicio de sesión. (Si ha iniciado sesión pero no está autorizado, sucede algo más ...).

La redirección real se realiza mediante PageMap , que también en este caso recuerda la página a la que intentaba PageMap . Después de un inicio de sesión exitoso, la página de inicio de sesión puede solicitarle que lo envíe a la página que estaba intentando originalmente llamando a continueToOriginalDestination() , que es un método en Component y recupera la página recordada de PageMap .

Hay un buen código de ejemplo para este proceso de autenticación, pero la excepción y el intercepto se esconden un poco detrás de las escenas.