Come posso cancellare o nascondere il numero di versione nell'URL introdotto in Wicket 1.5?elimina il numero di versione nell'url
Il montaggio di una pagina non aiuta.
http://localhost/MyPage/SubPage?0
Come posso cancellare o nascondere il numero di versione nell'URL introdotto in Wicket 1.5?elimina il numero di versione nell'url
Il montaggio di una pagina non aiuta.
http://localhost/MyPage/SubPage?0
In Application.init():
mount(new MountedMapperWithoutPageComponentInfo("/subpage", MyPage.class));
con la seguente classe 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);
}
}
}
Utilizzare il seguente programma di mappatura per montare le pagine, questo dovrebbe funzionare su qualsiasi pagina marcabile del libro tranne la homepage.
Ecco come utilizzare il mapper in Application.init()
mount(new MountedMapperWithoutPageComponentInfo("/subpage", MyPage.class));
Ecco il mapper.
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
}
}
ho provato il primo metodo, il numero di versione scompare ma tutti i link smette di funzionare. Il secondo metodo non elimina i numeri di versione. – rotsch
Il primo metodo funziona per me, senza problemi. Anche la mia pagina ha link, tutto funziona bene. Vedi qualche errore? Anche la tua corretta sulla seconda soluzione, non funziona e l'ho tolto, mi dispiace. – Alinoor
Sono riuscito a ricreare parzialmente il problema dei collegamenti non funzionanti, nel mio caso ci sono stati moduli che hanno smesso di funzionare.Ho usato la risposta da http://stackoverflow.com/questions/2178285/stateless-apache-wicket-stateless-pages-requests per verificare quale dei miei componenti fosse pieno di stato, per la maggior parte di essi avevo solo bisogno di sovrascrivere getStatelessHint () metodo per restituire true, per collegamenti e moduli ho usato la versione senza stato (StatelessLink, StatelessForm). Ho quindi smesso di utilizzare il codice precedente e ComponentInfo non ha più eseguito il rendering e le pagine sembrano funzionare con i test rapidi che ho fatto. – Alinoor
Se non si desidera il numero di versione, la pagina deve essere completamente senza stato, il numero di versione è pensato per pagine con stato. Ad esempio se la tua pagina include un modulo, dovresti utilizzare la variante senza stato del componente Form, che è org.apache.wicket.markup.html.form.StatelessForm. Se la tua pagina è già completamente stateless, puoi dare un consiglio a wicket invocando il metodo org.apache.wicket.Page # setStatelessHint.
Hai ragione. Ma voglio pagine di stato senza un numero di versione, questo era possibile in wicket 1.4. – rotsch
Per me la soluzione con setStatelessHint
non ha funzionato. Di seguito ha fatto il lavoro:
class MyApplication extends WebApplication {
@Override protected void init() {
getRequestCycleSettings().setRenderStrategy(
IRequestCycleSettings.RenderStrategy.ONE_PASS_RENDER);
....
}
}
Questa soluzione funziona per me per Wicket versione 6.16.0. – Yuci
La soluzione utilizzando una classe MountedMapperWithoutPageComponentInfo auto-creato non funziona per Wicket 6.13+, la pagina non risponderà ai callback azioni dell'utente. (. Noti che ci sono più versioni di MountedMapperWithoutPageComponentInfo su Internet)
Una soluzione per 6.13+ (testato con 6.15) può essere trovato qui:
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);
}
}
}
Quindi è possibile montare le pagine utilizzando:
// Put this in the init() method of your WebApplication subclass
getRootRequestMapperAsCompound().add(new NoVersionMapper("urlPatternOfAPage", YourPage.class));
Qual è la soluzione se si utilizza l'annotazione '@ MountPath' per montare una pagina? – Jon
Le soluzioni alternative suggerite potrebbero funzionare con versioni specifiche e avere effetti collaterali. Dovrebbero essere considerati hack. Ho usato questi hack e sono stati interrotti dalle nuove versioni. Pertanto ho creato una richiesta di supporto per framework generico qui (si prega di commentare/votare): setVersioned(false) should force single Page Version.
Un altro esempio di un effetto collaterale: Page Reload on Submit of non-versioned Page
ricorda che ho postato una risposta 3 anni fa. molte cose sono cambiate in wicket in questi anni :) – Apostolos
Ha funzionato! Grazie mille. Modifico il tuo post per rappresentare l'intera soluzione. – rotsch
Funziona davvero. Se si desidera questo comportamento per la propria home page, estendere invece HomePageMapper. –
Solo per chiarezza, questo rende le tue pagine stateless quindi non usare questo se vuoi pagine statefull. –