मैं तुम्हें एक जावास्क्रिप्ट-एकमात्र समाधान है, आमतौर पर एक विकेट व्यवहार के रूप में पैक तलाश कर रहा होगा लगता है।
var windowdirty = false;
var windowdirtyinitialized = false;
function initwindowdirty(){
if(windowdirtyinitialized)return;
windowdirtyinitialized=true;
Event.observe(window,"beforeunload",function(){
return (!windowdirty ||
confirm("You have started entering values, do you really want to leave");
});
}
function monitor(componentId){
$(componentId).observe("change",function(){
windowdirty = true;
});
}
function undirty(){
windowdirty=false;
}
हम एक फ़ाइल DontLeaveBehavior.js
यहाँ कहा जाता है में इस डाल देता हूँ है एक व्यवहार इस जावास्क्रिप्ट फ़ाइल का उपयोग करता है:
कार्यान्वयन जावास्क्रिप्ट पुस्तकालय आप उपयोग पर निर्भर करता है, यहाँ कुछ प्रोटोटाइप कोड है :
public class DontLeaveBehavior extends AbstractBehavior{
/**
* {@inheritDoc}
*/
@Override
public void renderHead(final IHeaderResponse response){
response.renderJavascriptReference(new JavascriptResourceReference(DontLeaveBehavior.class,
"DontLeaveBehavior.js"));
response.renderOnDomReadyJavascript("initwindowdirty();");
super.renderHead(response);
}
/**
* {@inheritDoc}
*/
@Override
public void bind(final Component component){
super.bind(component);
component.setOutputMarkupId(true);
}
/**
* {@inheritDoc}
*/
@Override
public void onRendered(final Component component){
final Response response = RequestCycle.get().getResponse();
response.write(JavascriptUtils.SCRIPT_OPEN_TAG);
response.write("monitor('" + component.getMarkupId() + "');");
response.write(JavascriptUtils.SCRIPT_CLOSE_TAG);
}
}
अब यहाँ एक पृष्ठ है कि स्वचालित रूप से इसे सभी के लिए इस व्यवहार प्रदान करती है बच्चों कि पाठ घटक हैं है:
public class Mypage extends WebPage{
...
private boolean behaviorAssigned = false;
/**
* {@inheritDoc}
*/
@Override
protected void onBeforeRender(){
if(!behaviorAssigned){
behaviorAssigned=true;
visitChildren(new IVisitor<Component>(){
@Override
public Object component(Component component){
if(component instanceof AbstractTextComponent<?>){
component.add(new DontLeaveBehavior());
}
return null;
}
});
}
super.onBeforeRender();
}
}
और अंतिम लेकिन कम से कम नहीं, आपके सबमिट बटन को undirty()
पर कॉल करना होगा।
इनमें से कोई भी परीक्षण नहीं किया गया है, क्योंकि मुझे अब अपनी पत्नी & बच्चों के साथ रात्रिभोज करने के लिए घर जाना है (जो निश्चित रूप से विकेट कोडिंग से भी अधिक मजेदार है), लेकिन यह आपको शुरू करना चाहिए।
प्रोटोटाइप विशिष्ट भाग आसानी से किसी भी अन्य जावास्क्रिप्ट lib में पोर्ट जाना चाहिए, लेकिन आप शायद एक lib के बिना यह नहीं करना चाहिए अगर आप आप क्या कर रहे पता नहीं है।
संपादित करें:
मुझे लगता है कि प्रोटोटाइप और mootools और posted it on my weblog साथ काम करता है इस का एक नया संस्करण बनाया है। यह संस्करण केवल फॉर्म घटक में स्थापित है और स्वचालित रूप से जावास्क्रिप्ट के माध्यम से बच्चों को खुद को जोड़ता है।
संपादित करें फिर से: वहाँ, अब लिंक काम कर रहा है
अपने जवाब के लिए धन्यवाद, लेकिन ऐसा लगता है ग्राहक मोडल विंडो होने के लिए पॉपअप चाहता है। इसलिए जावास्क्रिप्ट का उपयोग करना सबसे अच्छा समाधान नहीं हो सकता है। खेद है कि मैंने इस सवाल में उल्लेख नहीं किया था। मैं बाकी पर एक नज़र डालेगा, मुझे यकीन है कि मैं कुछ उपयोग कर सकता हूं :) धन्यवाद! अगर मैं अपनी समस्या का समाधान करता हूं तो मैं आपका जवाब चिह्नित करूंगा। – Jivings
क्षमा करें, मैंने गलत विधि नाम दर्ज किया है। यह 'पुष्टि' है, न कि 'प्रॉम्प्ट'। और हाँ, यह एक मोडल विंडो है और नहीं, आप बिना जावास्क्रिप्ट के एक बना सकते हैं। हालांकि, मैं थोड़ा और सुरुचिपूर्ण समाधान पर काम कर रहा हूं जिसे मैं जल्द ही पोस्ट करूंगा। –
नया संस्करण उपलब्ध है, मेरा अपडेट देखें। –