2015-02-02 13 views
5

मैंने पहले ही इस सवाल को वाइल्डफली मंच में पूछा है लेकिन अब तक कोई जवाब नहीं मिला है। तो मैं यहाँ कोशिश कर रहा हूँ।जेएसएफ बटन एक्शन दो बार ट्रिगर हुआ

चूंकि मैंने वाइल्डफ्लि 8.1 से 8.2 तक अपग्रेड किया है, इसलिए मुझे एक टैब के अंदर एक कमांड बटन के साथ समस्या है जिसमें एक बीन से जुड़ा हुआ दृश्य है।

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://xmlns.jcp.org/jsf/html" 
     xmlns:p="http://primefaces.org/ui"> 
    <h:head></h:head> 
    <h:body> 
     <h:form> 
      <p:tabView binding="#{testBean.tabView}"> 
       <p:tab title="Tab"> 
        <p:commandButton value="Inside" action="#{testBean.testInside}"/> 
       </p:tab> 
      </p:tabView> 
      <p:commandButton value="Outside" action="#{testBean.testOutside}"/> 
     </h:form> 
    </h:body> 
</html> 

और सेम:

यहाँ एक सरल JSF पेज है

@Named 
@SessionScoped 
public class TestBean implements Serializable { 
    private TabView tabView = new TabView(); 

    public TabView getTabView() { 
     return tabView; 
    } 

    public void setTabView(TabView tabView) { 
     this.tabView = tabView; 
    } 

    public void testInside() { 
     System.out.println("inside"); 
    } 

    public void testOutside() { 
     System.out.println("outside"); 
    } 
} 

"अंदर" बटन पर क्लिक करने testInside()दो बार चलाता है। "बाहरी" बटन (टैब व्यू के बाहर) सामान्य रूप से व्यवहार करता है और केवल एक बार विधि को ट्रिगर करता है। टैबव्यू बाध्यकारी को हटाने से समस्या समाप्त हो जाती है। मैं प्राइमफेस 4.0 का उपयोग कर रहा हूँ।

किसी भी विचार

जनवरी

+1

बाध्यकारी ('बाध्यकारी =" # {testBean.tabView} "') की आवश्यकता क्यों है? – Tiny

+0

असली एप्लिकेशन में बाध्यकारी की आवश्यकता है क्योंकि टैब गतिशील रूप से उत्पन्न होते हैं। – jpstrube

+0

क्या आप इस न्यूनतम एप्लिकेशन को एक नए पीएफ संस्करण के साथ आज़मा सकते हैं और जांच सकते हैं कि यह अभी भी होता है या नहीं? – Kukeltje

उत्तर

7

यह एक Mojarra 'issue', 2.2.7 में एक प्रदर्शन के अनुकूलन ठीक द्वारा शुरू की है के लिए धन्यवाद।

यह एक मोजररा "मुद्दा" है, मैंने आरएफ -13 9 20 पर काम करते समय इसे खोज लिया है, इसे जावास्वार्फ़ेस -31 9 3 द्वारा पेश किया गया था। बाध्यकारी का उपयोग करने वाले घटकों को सर्वर के अनुरोध के दौरान पुनर्निर्मित नहीं किया जाता है लेकिन उनके बच्चे हैं। मूल बच्चों को अभी भी नए बच्चों को डालने के स्थान पर "डुप्लिकेट आईडी" त्रुटि का कारण बनता है।

तो यह आपके बटन की तरह दो बार जोड़ा जाता है लगता है, लेकिन जब से तुम एक स्पष्ट आईडी सौंपा नहीं है, यदि आपके पास डुप्लीकेट आईडी त्रुटि मिलती नहीं है ... देने के लिए है कि एक कोशिश (एक स्पष्ट जोड़ने दिलचस्प हो सकता है आईडी)

जेएसएफ विनिर्देश बताता है कि बाध्यकारी केवल अनुरोध दायरे में उपयोग किया जाना चाहिए, इसलिए मुझे नहीं लगता कि यह वार्तालाप के दायरे में विफल होने पर इसे एक बग के रूप में माना जाना चाहिए।

अंतिम टिप्पणी दिलचस्प है। के रूप में jboss साइट पर अगली पोस्ट में पोस्ट किया जाता है:

लेकिन अब मुझे लगता है कि मैं इस समस्या के लिए एक संतोषजनक समाधान है और मैं इस बात की पुष्टि कर सकते हैं, घटक के लिए अनुरोध-दायरे वाले समर्थन सेम के साथ अपवाद बाध्यकारी है कि और डुप्लिकेट आईडी समस्या अब और नहीं होती है, यहां तक ​​कि वाइल्डफ्लाई-8.2.0 से मोजररा 2.2.8 के साथ भी। अंतिम!

यह भी सच है यदि पृष्ठ के बाकी तर्क एक (कहें) वार्तालाप स्कैन बीन में रहते हैं। आपको बस बाध्यकारी विशेषता के लिए अनुरोध-स्कोप्ड बीन होना चाहिए, जिसे ईएल और अन्य बीन्स में संदर्भित किया जा सकता है।

चेक भी this post

+0

आप सही हैं, डुप्लिकेट आईडी त्रुटि में एक आईडी परिणाम असाइन करना। मैं अनुरोध स्कोप के साथ मिलकर कोशिश करूँगा या बाध्यकारी को छोड़कर बाउलससी के सुझाव के रूप में छोड़ दूंगा। – jpstrube

+0

mojarra 2.2.6 का उपयोग करके मेरी समस्या तय की गई – ameen

+0

@ameen: तो आप डाउनग्रेड ??? – Kukeltje

-3

आप अन्य तरीके से कर रही कोशिश कर सकते हैं। कमांड बटन की उसी क्रिया के साथ टैब से दूरस्थ कॉमांड का उपयोग करें।
फिर कमांड बटन के ऑनक्लिक ईवेंट में रिमोट कॉमांड द्वारा बनाए गए जावास्क्रिप्ट फ़ंक्शन का उपयोग करें।
यहां आपके कोड का उपयोग करने वाला उदाहरण है।
यह कार्यात्मक है।

<h:form> 
    <p:remoteCommand id="myfun" name="myfun" action="#{testBean.testInside}" /> 
    <p:tabView binding="#{testBean.tabView}"> 
     <p:tab title="Tab"> 
      <p:commandButton value="Inside" onclick="myfun();"/> 
     </p:tab> 
    </p:tabView> 
</h:form> 
+1

का उल्लंघन किया गया है, लेकिन यदि आपके पास 6 टैब हैं, तो 6 अलग-अलग बटनों के साथ आपको 6 दूरस्थ आदेशों की आवश्यकता है। और इस मामले में कमांड बटन का उपयोग करना भी 'गलत' है, आपको 'type = "बटन' 'के साथ कमांड बटन का उपयोग करना चाहिए ...' यह समाधान अधिक जटिलता पेश कर रहा है, इसके बाद इसे 'सही' – Kukeltje

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