2015-06-03 6 views
5

के साथ सबमिट किया गया है, मेरे पास पूर्वावलोकन बटन है। जब उपयोगकर्ता प्रेस पूर्वावलोकन करता है, तो पीडीएफ फ़ाइल को फॉर्म में डेटा दिखाने के लिए फॉर्म को नए टैब पर सबमिट किया जाता है। मैं एक कस्टम SubmitLink का उपयोग करें कि SubmitResourceLinkलक्ष्य पृष्ठ को रीफ्रेश किया जाता है यदि फॉर्म के बाद AJAX का उपयोग लक्ष्य = _blank

public abstract class SubmitResourceLink extends SubmitLink implements IResourceListener { 
private final IResource resource; 

@Override 
public final void onResourceRequested() { 
    Attributes a = new Attributes(RequestCycle.get().getRequest(), RequestCycle.get().getResponse(), null); 
    resource.respond(a); 
} 

रूप

new SubmitResourceLink("previewBtn", form, new JasperReportsResource() { 
     private static final long serialVersionUID = -2596569027102924489L; 

     @Override 
     public byte[] getData(Attributes attributes) { 
      return control.getExportPreviewByteStream(estimateModel.getObject()); 
     } 
    }) { 
     private static final long serialVersionUID = 1L; 

     @Override 
     protected String getTriggerJavaScript() { 
      String js = super.getTriggerJavaScript(); 
      js = "document.getElementById('" + form.getMarkupId() + "').target='_blank';" + js; 
      return js; 
     } 

     @Override 
     public void onSubmit() { 
      form.add(AttributeModifier.append("target", Model.of("_blank"))); 
      processInputs(form); 
      onResourceRequested(); 
     } 
    }.setDefaultFormProcessing(false); 

जब मैं पूर्वावलोकन प्रेस पर लागू करने के लिए, एक नया टैब opend है। लेकिन जब मैं किसी भी AJAX घटक में इनपुट करता हूं (उदा: ऑटोकंपलेटटेक्स्टफिल्ड), AJAX रेपॉन्स डेटा xml: <ajax-response><redirect>....</redirect></ajax-response> और पेज रीफ्रेश करें। अब, मैं प्रेस पूर्वावलोकन के बाद चाहता हूं, मैं अभी भी वर्तमान फॉर्म normaly का उपयोग करता हूं। धन्यवाद।

उत्तर

1

यह विकेट में "पुरानी पृष्ठ सुरक्षा" के कारण होता है। पहला क्लिक एक ही टैब उदाहरण को एक नए टैब/विंडो में खुलता है। यह पृष्ठ के renderCount काउंटर को बढ़ाता है, यानी यह कहता है "यह पृष्ठ एन बार प्रस्तुत किया गया है"।
विकेट में लिंक ?2-1.ILinkListener-component~path जैसा दिखते हैं। यहां '2' पृष्ठ आईडी है और '1' पृष्ठ गिनती है। तो टैब 1 में दिए गए लिंक में 'एन', और टैब 2 - 'एन + 1' में लिंक प्रस्तुत किए गए हैं।
टैब 1 में किसी लिंक पर क्लिक करने से StalePageException के साथ असफल हो जाएगा जो विकेट को बताता है "उपयोगकर्ता पृष्ठ के अप्रचलित संस्करण का उपयोग करने का प्रयास कर रहा है। कृपया पृष्ठ का नवीनतम संस्करण प्रस्तुत करें ताकि उपयोगकर्ता फिर से प्रयास कर सके"।

यह सुरक्षा आवश्यक है क्योंकि उपयोगकर्ता टैब 3 में कई क्रियाएं कर सकता है, उदा। उस पैनल को प्रतिस्थापित करें जो उस लिंक को प्रतिस्थापित/छुपाता है जिसे उपयोगकर्ता टैब 1 में क्लिक करना चाहता है। यदि ऐसी कोई सुरक्षा नहीं है तो लिंक या तो लिंक पर क्लिक करने की कोशिश करते समय घटक नॉटफाउंड अपवाद के साथ विफल हो जाएगा या इससे भी बदतर गलत कार्रवाई कर सकती है यदि लिंक/बटन दोहराने वाला है और पुनरावर्तक ने टैब 2 में अपनी वस्तुओं को बदल दिया है।

आपकी समस्या को दूर करने के लिए आप tab2 में एक नया पृष्ठ उदाहरण खोलने चाहिए, जैसे कि यह प्रपत्र सबमिट लेकिन onSubmit() में setResponsePage(getPage().getClass()) की तरह कुछ नहीं करता है। इस तरह यह वर्तमान पृष्ठ उदाहरण एन + 1 समय फिर से प्रस्तुत नहीं करेगा।

+0

anwser के लिए धन्यवाद। मैं समझता हूं कि विकेट ऐसा क्यों करता है। लेकिन मुझे नहीं पता कि मेरी समस्या का समाधान कैसे करें। – luanvu

+0

एक पॉपअप विंडो का उपयोग कर एक विकल्प है? एक नया टैब खोलने से यह बहुत आसान होगा। कुछ ऐसा होना चाहिए: SubmitLink # setPopupSettings (...) –

संबंधित मुद्दे