2011-12-22 19 views
22

में संस्करण संख्या हटाएं विकेट 1.5 में पेश किए गए यूआरएल में संस्करण संख्या को मैं कैसे हटा या छुपा सकता हूं?यूआरएल

किसी पृष्ठ को बढ़ाना मदद नहीं करता है।

http://localhost/MyPage/SubPage?0 

उत्तर

18

Application.init() में:

mount(new MountedMapperWithoutPageComponentInfo("/subpage", MyPage.class)); 

निम्नलिखित मैपर वर्ग के साथ:

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); 
     } 
    } 
} 
+1

यह काम किया! आपका बहुत बहुत धन्यवाद। मैं पूरे समाधान का प्रतिनिधित्व करने के लिए अपनी पोस्ट संपादित करता हूं। – rotsch

+0

वास्तव में काम करता है। यदि आप अपने मुखपृष्ठ के लिए यह व्यवहार चाहते हैं तो इसके बजाय HomePageMapper का विस्तार करें। –

+2

सिर्फ स्पष्टता के लिए, यह आपके पृष्ठों को स्टेटलेस बनाता है इसलिए यदि आप राज्य के पृष्ठ चाहते हैं तो इसका उपयोग न करें। –

3

पृष्ठों माउंट करने के लिए निम्नलिखित नक्शाकार का प्रयोग करें, यह मुखपृष्ठ को छोड़कर किसी भी किताब markable पृष्ठ पर काम करना चाहिए।

यहाँ कैसे()

mount(new MountedMapperWithoutPageComponentInfo("/subpage", MyPage.class)); 

Application.init में नक्शाकार उपयोग करने के लिए यहाँ नक्शाकार है।

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 
    } 
} 
+0

मैं पहली विधि की कोशिश की, संस्करण संख्या गायब हो जाता है, लेकिन सभी लिंक कार्य करना बंद कर। दूसरी विधि संस्करण संख्याओं को हटा नहीं देती है। – rotsch

+0

पहली विधि मेरे लिए बिना किसी समस्या के काम करती है। मेरे पृष्ठ में लिंक भी हैं, सभी ठीक काम करते हैं। क्या आपको कोई त्रुटि दिखाई देती है? दूसरे समाधान के बारे में भी आपका सही, यह काम नहीं करता है और मैंने इसे बाहर निकाला है, क्षमा करें। – Alinoor

+0

मैं काम नहीं कर रहे लिंक की समस्या को आंशिक रूप से पुनर्निर्मित करने में कामयाब रहा, मेरे मामले में ऐसे फॉर्म थे जो काम करना बंद कर देते थे।मैंने http://stackoverflow.com/questions/2178285/stateless-apache-wicket-stateless-pages- अनुरोधों का उत्तर यह जांचने के लिए किया कि मेरे कौन से घटक राज्य भर गए हैं, उनमें से अधिकांश के लिए मुझे getStatelessHint को ओवरराइड करने की आवश्यकता है () लिंक और रूपों के लिए, सही लौटने की विधि मैंने स्टेटलेस संस्करण (स्टेटलेसलिंक, स्टेटलेसफॉर्म) का उपयोग किया। मैंने फिर उपरोक्त कोड का उपयोग करना बंद कर दिया और कंपोनेंटइन्फो को अब और प्रस्तुत नहीं किया जा रहा था और पेज मेरे द्वारा किए गए त्वरित परीक्षणों से काम कर रहे हैं। – Alinoor

4

यदि आप संस्करण संख्या नहीं चाहते हैं तो आपको पृष्ठ पूरी तरह से स्टेटलेस होना चाहिए, संस्करण संख्या राज्य के पृष्ठों के लिए है। उदाहरण के लिए यदि आपके पृष्ठ में एक फॉर्म शामिल है तो आपको फॉर्म घटक के स्टेटलेस संस्करण का उपयोग करना चाहिए, जो org.apache.wicket.markup.html.form.StatelessForm है। यदि आपका पृष्ठ पहले से ही पूरी तरह से स्टेटलेस है, तो आप org.apache.wicket.Page # setStatelessHint विधि का आह्वान करके विकेट को संकेत दे सकते हैं।

+3

आप सही हैं। लेकिन मैं बिना किसी संस्करण संख्या के राज्यव्यापी पेज चाहता हूं, यह विकेट 1.4 में संभव था। – rotsch

3

मेरे लिए setStatelessHint साथ समाधान काम नहीं किया।

class MyApplication extends WebApplication { 
    @Override protected void init() { 
     getRequestCycleSettings().setRenderStrategy(
      IRequestCycleSettings.RenderStrategy.ONE_PASS_RENDER); 
     .... 
    } 
} 
+0

यह समाधान विकेट संस्करण 6.16.0 के लिए मेरे लिए काम करता है। – Yuci

4

समाधान एक स्वयं बनाया MountedMapperWithoutPageComponentInfo वर्ग का उपयोग कर विकेट 6.13+ के लिए काम नहीं करता है, पेज उपयोगकर्ता क्रियाओं को कालबैक का जवाब नहीं होगा: निम्नलिखित काम किया है। (। नोट इंटरनेट पर MountedMapperWithoutPageComponentInfo के कई संस्करण देखते हैं कि)

6.13+ (6,15 के साथ परीक्षण) के लिए एक समाधान पाया जा सकता है:

http://apache-wicket.1842946.n4.nabble.com/Delete-version-number-in-url-td4665752.html

https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java

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

तो फिर तुम का उपयोग कर पृष्ठों माउंट कर सकते हैं:

// Put this in the init() method of your WebApplication subclass 
getRootRequestMapperAsCompound().add(new NoVersionMapper("urlPatternOfAPage", YourPage.class)); 
+0

यदि आप पृष्ठ को माउंट करने के लिए '@ माउंटपाथ' एनोटेशन का उपयोग करते हैं तो समाधान क्या है? – Jon

0

अब तक सुझाए गए कामकाज विशिष्ट रिलीज के साथ काम कर सकते हैं और साइड इफेक्ट्स हो सकते हैं। उन्हें हैक माना जाना चाहिए। मैंने इन हैक्स का उपयोग किया है और वे नई रिलीज से टूट गए थे। इसलिए मैंने यहां जेनेरिक फ्रेमवर्क समर्थन के लिए एक अनुरोध बनाया है (कृपया टिप्पणी/वोट): setVersioned(false) should force single Page Version

एक पक्ष प्रभाव का एक और उदाहरण: Page Reload on Submit of non-versioned Page

+0

याद रखें कि मैंने 3 साल पहले उत्तर पोस्ट किया था। इन वर्षों में विकेट में कई चीजें बदल गई हैं :) – Apostolos