मैं रिकॉर्ड्स के डेटाटेबल के साथ काम कर रहा हूं। मैं उपयोगकर्ता को एक पंक्ति इनलाइन को हटाने और संपादित करने की क्षमता देना चाहता हूं (ट्रैश के साथ कॉलम और आइकन संपादित करें)। जब उपयोगकर्ता हटाना चाहता है, तो मुझे क्लाइंट-साइड कस्टम पुष्टिकरण की आवश्यकता होती है। अगर वे हाँ क्लिक करते हैं, तो मैं सर्वर पर सबमिट करना चाहता हूं और पंक्ति को हटाना चाहता हूं।

मेरे पास यह इस तरह की पुष्टि के बिना काम कर रहा है, क्योंकि मैं एक <datatable /> के संदर्भ में हूं:

<xp:button styleClass="btn red"
           value="Delete"
           id="btnConfirmDelete">

    <xp:eventHandler event="onclick"
                     submit="true"
                     refreshMode="partial"
                     refreshId="dataTable"
                     disableValidators="true">

        <xp:this.parameters>
            <xp:parameter name="rowIndex"
                value="#{rowIndex}">
            </xp:parameter>
        </xp:this.parameters>

        <xp:this.actionListeners>
            <xp:actionListener type="com.domain.thing.listeners.deleteItemListener">
            </xp:actionListener>
        </xp:this.actionListeners>
    </xp:eventHandler>
</xp:button>

यह बटन रिपीट पैनल में है। प्रत्येक पंक्ति अनुक्रमणिका EL "#{rowIndex}" द्वारा लागू की जा रही है।

यह बहुत अच्छा काम करता है।

अब मुझे एक कस्टम पुष्टिकरण संदेश पेश करने की आवश्यकता है।

इसलिए मैंने डिलीट डायलॉग बॉक्स लॉन्च करने के लिए इस बटन को <a /> से बदल दिया ... और डिलीट बटन को डायलॉग बॉक्स में पहले से ही काम कर रहा है। अब मुद्दा यह है कि क्या मैंने "#{rowIndex}" खो दिया है। इसके बजाय मैं मूल्य को डीओएम में सेट करने के लिए एक कस्टम प्रॉपर्टी का उपयोग करता हूं।

मेरे पास जो समस्या है वह इस मान को श्रोता com.domain.thing.listeners.deleteItemListener में params के माध्यम से पुनर्प्राप्त कर रहा है।

मैंने कोड को इस तरह समायोजित किया:

<xp:eventHandler event="onclick"
                 submit="true"
                 refreshMode="partial"
                 refreshId="demurrageDataTable"
                 onStart="XSP.setSubmitValue(window.dataTableRowDelete); alert('row is ' + XSP.getSubmitValue());"
                 onError="alert('onError: There was an error with the request.');"
                 disableValidators="true">

    <xp:this.parameters>
        <xp:parameter name="rowIndex"
                      value="#javascript:context.getSubmittedValue();}">
        </xp:parameter>
    </xp:this.parameters>
    <xp:this.actionListeners>
        <xp:actionListener type="com.canalbarge.trak.listeners.deleteDemurrageItemListener">
        </xp:actionListener>
    </xp:this.actionListeners>
</xp:eventHandler>

ऑनस्टार्ट मुझे पंक्ति इंडेक्स मिलता है जो संवाद के लॉन्च द्वारा निर्धारित किया गया था। जब अलर्ट सक्रिय होता है, तो सही पंक्ति इंडेक्स प्रदर्शित होता है।

ईवेंट श्रोता में सर्वर साइड में एक अपवाद है क्योंकि p.getValue() हमेशा एक खाली स्ट्रिंग "" होती है।

XspEventHandler eventHandler = (XspEventHandler) event.getSource();
List<Parameter> params = eventHandler.getParameters();
System.out.println(btnName + "checking event params");

if(params != null){
    for (Parameter p : params) {
        System.out.println(btnName + p.getName() + "," + p.getValue());
        if(p.getName().equals("rowIndex")){
            rowIndex = Integer.parseInt(p.getValue());
        }
    }
}
else{
    System.out.println(btnName + "params is null.");
}
0
xpagesbeast 5 जिंदा 2017, 06:04

3 जवाब

इस तरह की चीज़ के लिए मेरा सामान्य दृष्टिकोण - दोहराने में बटन, संवाद लॉन्च करना, फिर संवाद बंद होने पर पंक्ति सर्वर-साइड पर अभिनय करना - व्यूस्कोप चर में दोहराने के तत्व के संदर्भ को संग्रहीत करना है। यह संभव है कि इसे xp:inputHidden पर पास करना भी काम करेगा और सीएसजेएस के माध्यम से किया जा सकता है, इसलिए संवाद शुरू करने के लिए एसएसजेएस का उपयोग करने से बचें।

1
Paul Stephen Withers 5 जिंदा 2017, 11:24

उस डिलीट इवेंट की क्लाइंट साइड स्क्रिप्ट को सरल return confirm("Are you sure?"); के साथ परिभाषित करें जो SSJS स्क्रिप्ट को तभी निष्पादित करेगी जब उपयोगकर्ता हाँ पर क्लिक करेगा।

0
Frantisek Kossuth 5 जिंदा 2017, 13:53
मैं ब्राउज़र पुष्टिकरण फ़ंक्शन का उपयोग नहीं कर सकता। मुझे एक कस्टम संवाद बॉक्स का उपयोग करना है।
 – 
xpagesbeast
9 जिंदा 2017, 18:22

समाधान मेरी टिप्पणियों में है। पंक्ति संपादन आइकन पर क्लिक करते समय आपको पंक्ति अनुक्रमणिका सेट करने की आवश्यकता होती है। मेरे मामले में, मैं सबमिट किए गए मान चर का उपयोग कर रहा हूं। जैसा कि पॉल स्टीफंस विदर्स ने संकेत दिया था, आप स्कोप्ड वेरिएबल्स में से एक का उपयोग कर सकते हैं। सभी मामलों में, एप्लिकेशन मैप वेरिएबल में से किसी एक में rowIndex को सेव करें और जब आपका डायलॉग निष्पादित हो, तो आपको इस वेरिएबल वैल्यू का उपयोग करने की आवश्यकता है।

0
xpagesbeast 9 जिंदा 2017, 18:26