urls - eliminar número de versión en url
eliminar url visitadas (7)
En Application.init ():
mount(new MountedMapperWithoutPageComponentInfo("/subpage", MyPage.class));
con la siguiente clase de Mapper:
public class MountedMapperWithoutPageComponentInfo extends MountedMapper {
public MountedMapperWithoutPageComponentInfo(String mountPath, Class<? extends IRequestablePage> pageClass) {
super(mountPath, pageClass, new PageParametersEncoder());
}
@Override
protected void encodePageComponentInfo(Url url, PageComponentInfo info) {
// do nothing so that component info does not get rendered in url
}
@Override
public Url mapHandler(IRequestHandler requestHandler)
{
if (requestHandler instanceof ListenerInterfaceRequestHandler ||
requestHandler instanceof BookmarkableListenerInterfaceRequestHandler) {
return null;
} else {
return super.mapHandler(requestHandler);
}
}
}
¿Cómo puedo eliminar u ocultar el número de versión en la URL introducida en Wicket 1.5?
Montar una página no ayuda.
http://localhost/MyPage/SubPage?0
La solución que utiliza una clase MountedMapperWithoutPageComponentInfo de creación propia no funciona para Wicket 6.13+, la página no responderá a las acciones de usuario de devolución de llamada. (Tenga en cuenta que hay múltiples versiones de MountedMapperWithoutPageComponentInfo en Internet).
Una solución para 6.13+ (probada con 6.15) se puede encontrar aquí:
http://apache-wicket.1842946.n4.nabble.com/Delete-version-number-in-url-td4665752.html
// Put this code in your WebApplication subclass
import org.apache.wicket.core.request.mapper.MountedMapper;
import org.apache.wicket.request.component.IRequestablePage;
import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
import org.apache.wicket.request.mapper.info.PageComponentInfo;
import org.apache.wicket.request.IRequestHandler;
import org.apache.wicket.core.request.handler.BookmarkableListenerInterfaceRequestHandler;
private static class NoVersionMapper extends MountedMapper {
public NoVersionMapper(final Class<? extends IRequestablePage> pageClass) {
this("/", pageClass);
}
public NoVersionMapper(String mountPath, final Class<? extends IRequestablePage> pageClass) {
super(mountPath, pageClass, new PageParametersEncoder());
}
@Override
protected void encodePageComponentInfo(Url url, PageComponentInfo info) {
//Does nothing
}
@Override
public Url mapHandler(IRequestHandler requestHandler) {
if (requestHandler instanceof ListenerInterfaceRequestHandler || requestHandler instanceof BookmarkableListenerInterfaceRequestHandler) {
return null;
} else {
return super.mapHandler(requestHandler);
}
}
}
Luego puedes montar páginas usando:
// Put this in the init() method of your WebApplication subclass
getRootRequestMapperAsCompound().add(new NoVersionMapper("urlPatternOfAPage", YourPage.class));
Las soluciones sugeridas hasta ahora pueden funcionar con lanzamientos específicos y tener efectos secundarios. Deben ser considerados hacks. He usado estos hacks y se rompieron con nuevos lanzamientos. Por lo tanto, he creado una solicitud de soporte de marco genérico aquí (por favor comentar / votar): setVersioned (falso) debe forzar la versión de página única .
Otro ejemplo de un efecto secundario: página Recargar en Enviar de página no versionada
Para Wicket 8, esta clase NoVersionMapper funciona:
public class NoVersionMapper extends MountedMapper {
public NoVersionMapper(final Class pageClass) {
this("/", pageClass);
}
public NoVersionMapper(String mountPath, final Class pageClass) {
super(mountPath, pageClass, new PageParametersEncoder());
}
@Override
protected void encodePageComponentInfo(Url url, PageComponentInfo info) {
//Does nothing
}
@Override
public Url mapHandler(IRequestHandler requestHandler) {
if (requestHandler instanceof ListenerRequestHandler || requestHandler instanceof BookmarkableListenerRequestHandler) {
return null;
} else {
return super.mapHandler(requestHandler);
}
}
}
Esto es básicamente lo mismo que el código de Devabc, pero este se compila en Wicket 8. Se ha probado contra regresiones conocidas de las versiones anteriores del código: Ajax funciona y no se activa la actualización de la página cuando no debería.
Para mí, la solución con setStatelessHint
no funcionó. Lo siguiente funcionó:
class MyApplication extends WebApplication {
@Override protected void init() {
getRequestCycleSettings().setRenderStrategy(
IRequestCycleSettings.RenderStrategy.ONE_PASS_RENDER);
....
}
}
Si no desea el número de versión, su página debe ser completamente sin estado, el número de versión es para páginas con estado. Por ejemplo, si su página incluye un formulario, entonces debe usar la variante sin estado del componente Formulario, es decir, org.apache.wicket.markup.html.form.StatelessForm. Si su página ya es completamente apátrida, puede darle a wicket una pista invocando el método org.apache.wicket.Page # setStatelessHint.
Utilice el siguiente mapeador para montar páginas, esto debería funcionar en cualquier página marcable de libros, excepto en la página de inicio.
A continuación, se explica cómo usar el asignador en Application.init ()
mount(new MountedMapperWithoutPageComponentInfo("/subpage", MyPage.class));
Aquí está el mapeador.
import org.apache.wicket.request.Url;
import org.apache.wicket.request.component.IRequestablePage;
import org.apache.wicket.request.mapper.MountedMapper;
import org.apache.wicket.request.mapper.info.PageComponentInfo;
import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
public class MountedMapperWithoutPageComponentInfo extends MountedMapper {
public MountedMapperWithoutPageComponentInfo(String mountPath, Class<? extends IRequestablePage> pageClass) {
super(mountPath, pageClass, new PageParametersEncoder());
}
@Override
protected void encodePageComponentInfo(Url url, PageComponentInfo info) {
// does nothing so that component info does not get rendered in url
}
}