कमांडबटन / कमांडलिंक / अजाक्स एक्शन / श्रोता विधि लागू नहीं की गई या इनपुट वैल्यू सेट / अपडेट नहीं हुई


345

कभी कभी, जब का उपयोग कर <h:commandLink>, <h:commandButton>या <f:ajax>, action, actionListenerया listenerटैग के साथ संबद्ध विधि बस लागू नहीं किया जा रहा है। या, प्रस्तुत गुणों के साथ सेम गुण अद्यतन नहीं UIInputहैं।

इसके लिए संभावित कारण और समाधान क्या हैं?

जवाबों:


687

परिचय

जब भी कोई UICommandघटक ( <h:commandXxx>, <p:commandXxx>आदि) संबंधित क्रिया विधि को लागू करने में विफल रहता है, या एक UIInputघटक ( <h:inputXxx>और <p:inputXxxx>, आदि) प्रस्तुत मूल्यों को संसाधित करने और / या मॉडल मूल्यों को अपडेट करने में विफल रहता है, और आप कोई भी देखने योग्य अपवाद और / या नहीं देख रहे हैं। सर्वर लॉग में चेतावनियाँ, वह भी नहीं जब आप जेएसएफ एजैक्स अनुरोधों में अपवाद हैंडलिंग के अनुसार एक अजाक्स अपवाद हैंडलर को कॉन्फ़िगर करते हैं , और न ही जब आप संदर्भ पैरामीटर नीचे में सेट करते हैं web.xml, तो

<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>

और आपको वेब डेवलपर टूलसेट खोलने और फिर कंसोल टैब खोलने के लिए ब्राउज़र की जावास्क्रिप्ट कंसोल (प्रेस F12 इन क्रोम / फ़ायरफ़ॉक्स 23 + / IE9 + में किसी भी प्रकार की त्रुटि) और / या चेतावनियाँ नहीं दिखाई दे रही हैं , तो संभावित कारणों की सूची के नीचे काम करें।

संभावित कारण

  1. UICommandऔर UIInputघटकों को एक UIFormघटक के अंदर रखा जाना चाहिए , जैसे <h:form>(और इस तरह सादे HTML नहीं <form>), अन्यथा सर्वर पर कुछ भी नहीं भेजा जा सकता है। UICommandघटकों में भी type="button"विशेषता नहीं होनी चाहिए , अन्यथा यह एक मृत बटन होगा जो केवल जावास्क्रिप्ट के लिए उपयोगी है onclick। यह भी देखें कि फॉर्म इनपुट वैल्यू कैसे भेजें और JSF बीन में एक विधि लागू करें और <h: कमांडबटन> एक पोस्टबैक शुरू नहीं करता है

  2. आप UIFormएक दूसरे में कई घटकों को घोंसला नहीं दे सकते । यह HTML में अवैध है। ब्राउज़र व्यवहार अनिर्दिष्ट है। बाहर फ़ाइलों के साथ देखो! आप UIFormसमानांतर में घटकों का उपयोग कर सकते हैं , लेकिन वे सबमिट के दौरान एक दूसरे को संसाधित नहीं करेंगे। आपको "गॉड फॉर्म" एंटीपैटर्न के साथ भी देखना चाहिए; सुनिश्चित करें कि आप अनजाने में अन्य सभी (अदृश्य) इनपुटों को एक ही रूप में संसाधित / मान्य नहीं करते हैं (जैसे कि बहुत ही रूप में आवश्यक इनपुट के साथ एक छिपा हुआ संवाद करना)। यह भी देखें कि JSF पेज में <h: form> का उपयोग कैसे करें? एकल रूप? कई रूपों? घोंसले के रूप?

  3. कोई UIInputमान सत्यापन / रूपांतरण त्रुटि नहीं होनी चाहिए थी। आप <h:messages>किसी भी संदेश को दिखाने के लिए उपयोग कर सकते हैं जो किसी भी इनपुट-विशिष्ट <h:message>घटकों द्वारा नहीं दिखाए जाते हैं। शामिल करने के लिए मत भूलना idके <h:messages>में <f:ajax render>, यदि कोई हो, इतना है कि यह अच्छी तरह से ajax अनुरोध पर के रूप में अद्यतन किया जाएगा। यह भी देखें : संदेश तब प्रदर्शित नहीं होता है जब p: कमांडबटन को दबाया जाता है

  4. अगर UICommandया UIInputघटकों को एक पुनरावृत्ति घटक जैसे <h:dataTable>, <ui:repeat>आदि, के अंदर रखा जाता है , तो आपको यह सुनिश्चित करने की आवश्यकता है कि valueफॉर्म सबमिट अनुरोध के लागू अनुरोध मान चरण के दौरान ठीक उसी पुनरावृत्ति घटक को संरक्षित किया गया है। जेएसएफ उस पर क्लिक किए गए लिंक / बटन और प्रस्तुत इनपुट मानों को खोजने के लिए इसे दोहराएगा। बीन को दृश्य के दायरे @PostConstructमें रखना और / या यह सुनिश्चित करना कि आप बीन में डेटा मॉडल को लोड करते हैं (और इस तरह एक गेटर विधि में नहीं!) इसे ठीक करना चाहिए। यह भी देखें कि मुझे h के लिए डेटाबेस से मॉडल को कैसे और कब लोड करना चाहिए: dataTable

  5. यदि UICommandया UIInputघटकों को एक गतिशील स्रोत द्वारा शामिल किया जाता है जैसे कि <ui:include src="#{bean.include}">, तो आपको यह सुनिश्चित करने की आवश्यकता है कि #{bean.include}फॉर्म सबमिट अनुरोध के दृश्य निर्माण समय के दौरान समान मूल्य संरक्षित है। जेएसएफ घटक वृक्ष के निर्माण के दौरान इसका पुन: उपयोग करेगा। बीन को दृश्य के दायरे @PostConstructमें रखना और / या यह सुनिश्चित करना कि आप बीन में डेटा मॉडल को लोड करते हैं (और इस तरह एक गेटर विधि में नहीं!) इसे ठीक करना चाहिए। यह भी देखें कि नेविगेशन मेनू द्वारा कैसे अजाक्स-रिफ्रेश डायनामिक में सामग्री शामिल है? (जेएसएफ एसपीए)

  6. renderedघटक और उसके माता पिता के सभी और की विशेषता testकिसी भी माता-पिता की विशेषता <c:if>/ <c:when>मूल्यांकन नहीं किया जाना चाहिए करने के लिए falseके दौरान लागू प्रपत्र के अनुरोध मान चरण अनुरोध सबमिट करें। जेएसएफ इसे छेड़छाड़ / हैक किए गए अनुरोधों के खिलाफ सुरक्षा के हिस्से के रूप में फिर से जाँच करेगा। चर एक में हालत के लिए जिम्मेदार भंडारण @ViewScopedसेम या सुनिश्चित करें कि आपने ठीक तरह से हालत preinitializing की दिशा @PostConstructमें एक की @RequestScopedफलियों इसे ठीक करना चाहिए। वही disabledघटक की विशेषता पर लागू होता है , जिसे trueलागू अनुरोध मान चरण के दौरान मूल्यांकन नहीं करना चाहिए । जेएसएफ कमांडबटन की कार्रवाई को भी देखें , सशर्त रूप से प्रदान किए गए घटक में फॉर्म जमा न करें औरh: कमांडबटन काम नहीं कर रहा है जब मैं इसे एक <h: panelGroup रेंडर> में लपेटता हूं

  7. onclickकी विशेषता UICommandघटक और onsubmitकी विशेषता UIFormघटक वापस नहीं जाना चाहिए falseया JavaScript त्रुटि का कारण है। ब्राउज़र के JS कंसोल में दिखाई देने वाली JS त्रुटियाँ नहीं होनी चाहिए <h:commandLink>या होनी चाहिए <f:ajax>। आमतौर पर सटीक त्रुटि संदेश को देखने से आपको पहले ही उत्तर मिल जाएगा। गैर-टाइप किए गए टाइपर्स में प्राइमफेस के परिणाम के साथ jQuery को मैन्युअल रूप से जोड़ना / लोड करना भी देखें ।

  8. यदि आप JSF 2.x <f:ajax>या उदा प्रधानमंत्री के माध्यम से अजाक्स का उपयोग कर रहे हैं <p:commandXxx>, तो सुनिश्चित करें कि आपके पास <h:head>इसके बजाय मास्टर टेम्पलेट में है <head>। अन्यथा जेएसएफ आवश्यक जावास्क्रिप्ट फ़ाइलों को ऑटो में शामिल नहीं कर पाएगा जिसमें अजाक्स फ़ंक्शन शामिल हैं। इसका परिणाम जावास्क्रिप्ट त्रुटि में होगा जैसे कि ब्राउज़र के जेएस कंसोल में "मोज़रा परिभाषित नहीं है" या "प्राइमफेस परिभाषित नहीं है"। यह भी देखें : जब कमांड का इस्तेमाल नहीं किया जाता है तो कमांडलिंक एक्शनलिस्टर को f: ajax और ui: रिपीट के साथ प्रयोग किया जाता है

  9. यदि आप अजाक्स का उपयोग कर रहे हैं, और जमा किए गए मान समाप्त हो रहे हैं null, तो सुनिश्चित करें कि UIInputऔर UICommandब्याज के घटकों को <f:ajax execute>या उदाहरण के लिए कवर किया गया है <p:commandXxx process>, अन्यथा उन्हें निष्पादित / संसाधित नहीं किया जाएगा। <F: ajax> से <h: commandButton> और अंडरस्टैंडिंग प्राइमफेस प्रोसेस / अपडेट और JSF f: ajax को निष्पादित / रेंडर करने की विशेषताओं को जोड़ते समय सबमिट किए गए फॉर्म वैल्यू को मॉडल में अपडेट नहीं किया गया देखें ।

  10. यदि जमा किए गए मान अभी भी समाप्त हो रहे हैं null, और आप सेम का प्रबंधन करने के लिए सीडीआई का उपयोग कर रहे हैं, तो सुनिश्चित करें कि आप सही पैकेज से गुंजाइश एनोटेशन आयात करते हैं, अन्यथा सीडीआई डिफ़ॉल्ट रूप से @Dependentईएल के हर एक मूल्यांकन पर प्रभावी रूप से बीन को फिर से बनाएगा। अभिव्यक्ति। यह भी देखें @SessionScoped सेम लूप स्कोप खो देता है और हर समय रीक्रिएट हो जाता है, फ़ील्ड अशक्त हो जाते हैं और JSF 2 एप्लिकेशन में डिफ़ॉल्ट प्रबंधित बीन स्कोप क्या है?

  11. यदि बटन के <h:form>साथ एक अभिभावक UICommandपहले से ही प्रस्तुत किया गया है / एक ही पृष्ठ में एक और रूप से आने वाले एक अजाक्स अनुरोध द्वारा अद्यतन किया गया है, तो जेएसएफ 2.2 या पुराने में पहली कार्रवाई हमेशा विफल रहेगी। दूसरी और बाद की क्रियाएं काम करेंगी। यह राज्य के संचालन को ध्यान में रखते हुए एक बग के कारण होता है जिसे JSF कल्पना अंक 790 और वर्तमान में JSF 2.3 में नियत किया जाता है। पुराने JSF संस्करणों के लिए, आप स्पष्ट रूप से की आईडी निर्दिष्ट करने की आवश्यकता <h:form>में renderकी <f:ajax>। यह भी देखें : कमांडबटन / एच: कमांडलिंक पहले क्लिक पर काम नहीं करता है, केवल दूसरे क्लिक पर काम करता है

  12. अगर <h:form>है enctype="multipart/form-data"समर्थन फ़ाइल अपलोड करने के क्रम में निर्धारित करते हैं, तो आप यह है कि आप कम से कम JSF 2.2 का उपयोग कर रहे हैं, या कि जो बहुखण्डीय / फार्म डेटा अनुरोधों पार्स करने के लिए जिम्मेदार है सर्वलेट फिल्टर ठीक से विन्यस्त है, अन्यथा सुनिश्चित करने की आवश्यकता FacesServletइच्छा अंत में कोई अनुरोध पैरामीटर नहीं मिल रहा है और इस प्रकार अनुरोध मानों को लागू करने में सक्षम नहीं है। इस तरह के फ़िल्टर को कैसे कॉन्फ़िगर किया जाए, यह फ़ाइल अपलोड किए जाने वाले घटक पर निर्भर करता है। टॉमहॉक के लिए <t:inputFileUpload>, इस उत्तर की जांच करें और प्राइमफेस के लिए <p:fileUpload>, इस उत्तर को देखें । या, यदि आप वास्तव में एक फ़ाइल अपलोड नहीं कर रहे हैं, तो पूरी तरह से विशेषता को हटा दें।

  13. सुनिश्चित करें कि के ActionEventतर्कactionListener एक है javax.faces.event.ActionEventऔर इस प्रकार नहीं है java.awt.event.ActionEvent, जो कि सबसे अधिक आईडीई 1 स्वत: पूर्ण विकल्प के रूप में सुझाता है। यदि आप उपयोग करते हैं तो कोई तर्क गलत नहीं है actionListener="#{bean.method}"। यदि आप अपने तरीके में तर्क नहीं चाहते हैं, तो उपयोग करें actionListener="#{bean.method()}"। या शायद आप वास्तव में actionइसके बजाय उपयोग करना चाहते हैं actionListenerएक्शन और एक्शनलिस्ट के बीच अंतर भी देखें ।

  14. सुनिश्चित करें कि अनुरोध-प्रतिक्रिया श्रृंखला में PhaseListenerकिसी भी या किसी भी EventListenerव्यक्ति ने जेएसएफ जीवनचक्र को बदलकर चालान कॉल को चरणबद्ध नहीं किया है, उदाहरण के लिए कॉलिंग FacesContext#renderResponse()या FacesContext#responseComplete()

  15. सुनिश्चित करें कि कोई भी Filterया Servletएक ही अनुरोध-प्रतिक्रिया श्रृंखला ने FacesServletकिसी भी तरह से अनुरोध को अवरुद्ध नहीं किया है । उदाहरण के लिए, स्प्रिंग सुरक्षा जैसे लॉगिन / सुरक्षा फ़िल्टर। विशेष रूप से अजाक्स अनुरोध में डिफ़ॉल्ट रूप से कोई UI प्रतिक्रिया के साथ अंत में होगा। स्प्रिंग सिक्योरिटी 4 और प्राइमफेस 5 एजेएएक्स अनुरोध को भी देखें ।

  16. यदि आप एक प्राइमफेस <p:dialog>या ए का उपयोग कर रहे हैं <p:overlayPanel>, तो सुनिश्चित करें कि उनका अपना है<h:form> । क्योंकि, ये घटक HTML के अंत में स्थानांतरित जावास्क्रिप्ट द्वारा डिफ़ॉल्ट रूप से हैं <body>। इसलिए, यदि वे मूल रूप से अंदर बैठे थे <form>, तो वे अब अंदर नहीं बैठेंगे <form>पी भी देखें : कमांडबटन कार्रवाई पी के अंदर काम नहीं करती है: संवाद

  17. बग के ढांचे में। उदाहरण के लिए, RichFaces एक "है रूपांतरण त्रुटि " होती है जब विशेषता के rich:calendarसाथ UI तत्व का उपयोग किया जाता है defaultLabel(या, कुछ मामलों में, एक rich:placeholderउप-तत्व)। कैलेंडर तिथि के लिए कोई मान सेट नहीं होने पर यह बग बीन विधि को लागू होने से रोकता है। ट्रेसिंग फ्रेम बग को एक सरल कार्य उदाहरण के साथ शुरू करके और बग का पता चलने तक पृष्ठ का निर्माण करके पूरा किया जा सकता है।

डिबगिंग संकेत

यदि आप अभी भी अटके हैं, तो यह डीबग करने का समय है। क्लाइंट साइड में, वेब डेवलपर टूलसेट खोलने के लिए वेबब्रोज़र में F12 दबाएं। कंसोल टैब पर क्लिक करें ताकि जावास्क्रिप्ट कोनोसल दिखाई दे। यह किसी भी जावास्क्रिप्ट त्रुटियों से मुक्त होना चाहिए। नीचे स्क्रीनशॉट क्रोम से एक उदाहरण है जो <f:ajax>नहीं होने पर सक्षम बटन सबमिट करने के मामले को दर्शाता है<h:head> घोषित (जैसा कि ऊपर बिंदु 7 में वर्णित है)।

जे एस सांत्वना

HTTP ट्रैफ़िक मॉनिटर देखने के लिए नेटवर्क टैब पर क्लिक करें । फॉर्म सबमिट करें और जांच करें कि क्या अनुरोध हेडर और फॉर्म डेटा और प्रतिक्रिया निकाय उम्मीदों के अनुसार हैं। नीचे स्क्रीनशॉट क्रोम से एक उदाहरण एक सफल ajax एक एकल के साथ एक सरल फार्म के प्रस्तुत दर्शाता है जो है <h:inputText>और एक ही <h:commandButton>साथ <f:ajax execute="@form" render="@form">

नेटवर्क की निगरानी

(चेतावनी: जब आप HTTP से हेडर भेजते हैं, जैसे उत्पादन वातावरण से ऊपर हेडर, तब सुनिश्चित करें कि आप सत्र हाइजैकिंग हमलों से बचने के लिए स्क्रीनशॉट में किसी भी सत्र कुकीज़ को स्कैन / बाधित करें!)

सर्वर साइड में, सुनिश्चित करें कि सर्वर डीबग मोड में शुरू किया गया है। ब्याज की जेएसएफ घटक की एक विधि में एक डिबग ब्रेकपॉइंट डालें जिसे आप फॉर्म जमा करने की प्रक्रिया के दौरान बुलाए जाने की उम्मीद करते हैं। जैसे UICommandघटक के मामले में , यह होगा UICommand#queueEvent()और UIInputघटक के मामले में , यह होगा UIInput#validate()। कोड निष्पादन के माध्यम से बस कदम रखें और निरीक्षण करें कि प्रवाह और चर उम्मीदों के अनुसार हैं या नहीं। नीचे स्क्रीनशॉट ग्रहण के डिबगर से एक उदाहरण है।

डिबग सर्वर


1
आपके 2 अंक ने मुझे लंबे समय तक सोचने के लिए प्रेरित किया। मुझे अभी पता चला है कि मेरी मुख्य फ़ाइल में एक f: view टैग मेरी अधिकांश समस्याओं का कारण था। और शायद इसलिए कि यह एक रूप प्रस्तुत करता है, है ना?
पौलो गाइड्स

2
@pauloguedes I खिचड़ी कुछ भी नहीं है जो बताती है कि f: view एक रूप प्रदान करता है। मेरी समझ यह है कि यह सिर्फ एक कंटेनर है। मेरे अनुभव में, f: view किसी भी तत्व को प्रस्तुत नहीं करता है।
लुकास

@balusc बिंदु 4 पर थोड़ा स्पष्टीकरण, अगर कमांडलिंक डेटाटेबल में ही नहीं है, क्या यह अभी भी मायने रखता है?
लुकास

धन्यवाद, बिंदु वह बिंदु है: बीन को दृश्य दायरे में रखना और / या यह सुनिश्चित करना कि आप बीन के निर्माणकर्ता (पोस्ट) में डेटा मॉडल को लोड करते हैं (और इस प्रकार गेट्टर विधि में नहीं!) इसे ठीक करना चाहिए।
मूरोट्सोटी

2
@ कुल्कटजे: जिसने एक EL अपवाद (पहले से ही उत्तर में 1 पैराग्राफ द्वारा कवर) फेंक दिया होगा
BalusC

54

यदि आपका h:commandLinkअंदर है h:dataTableतो एक और कारण है जो h:commandLinkकाम नहीं कर सकता है:

अंतर्निहित डेटा-स्रोत जो h:dataTableदूसरे JSF-Lifecycle में भी उपलब्ध होना चाहिए, जो लिंक क्लिक होने पर चालू हो जाता है।

इसलिए यदि अंतर्निहित डेटा-स्रोत अनुरोधित है, तो h:commandLinkकाम नहीं करता है!


2
ठीक है, यह मेरे लिए पूरी तरह से स्पष्ट नहीं था। मुझे उम्मीद है कि मेरा जवाब वैसे भी मददगार है, क्योंकि मेरे मामले में कम से कम मैं UICommand / UIData के साथ स्पष्ट रूप से व्यवहार नहीं कर रहा था। "समाधान" अनुरोध-गुंजाइश से सत्र के दायरे तक एक बैकिंग बीन को बढ़ावा दे रहा था ...
7

1
मैं दूसरी जेन्स टिप्पणी करता हूं ... मेरे अनुरोध को स्वीकार करने के लिए सेम किए गए सेम को सत्रबद्ध करने के लिए मेरे डेटा पर अंतर किया गया - धन्यवाद
जैक मैककॉमर

28

हालांकि मेरा उत्तर 100% लागू नहीं है, लेकिन अधिकांश खोज इंजन इसे पहली हिट के रूप में पाते हैं, फिर भी मैंने इसे पोस्ट करने का फैसला किया है:

यदि आप PrimeFaces (या कुछ समान API) का उपयोग कर रहे हैं p:commandButtonया p:commandLink, संभावना है कि आप स्पष्ट रूप से जोड़ना भूल गए हैंprocess="@this" अपने कमांड घटकों हैं।

जैसा कि प्राइमफेस उपयोगकर्ता गाइड धारा 3.18 में बताता है, दोनों के लिए डिफॉल्ट्स हैं processऔर updateदोनों हैं @form, जो कि सादे जेएसएफ f:ajaxया रिचफैस, जो क्रमशः हैं execute="@this"और आप से उम्मीद कर सकते हैं कि डिफॉल्ट्स का बहुत विरोध करता render="@none"है।

बस मुझे पता करने के लिए एक लूओंग समय लगा। (... और मुझे लगता है कि यह जेएसएफ से भिन्न डिफॉल्ट का उपयोग करने के लिए चाचा नहीं है!)


6
प्राइमफेस के लिए डिफ़ॉल्ट processहै @form। इसलिए यदि कार्रवाई इस तरह से लागू नहीं की जाती है, लेकिन उपयोग करते समय @this, तो मेरे उत्तर की सबसे अधिक संभावना बिंदु 3 लागू होती है।
BalusC

3
यह नहीं हो सकता। मेरे पास p:commandButtonएक्शन लिस्ट बनाने का तरीका नहीं था, जब तक मैंने जोड़ा नहीं process="@this"। इसके अलावा, प्राइमफेसर्स यूजर गाइड ने खंड 3.18 और 3.19 में उल्लिखित चूक को स्पष्ट रूप से सूचीबद्ध किया है। यह यहाँ है: Primefaces.googlecode.com/files/primefaces_users_guide_3_4.pdf ... शायद चूक बदली गई थीं?
कावु

8
यह प्रलेखन में त्रुटि की संभावना है। निकालें process="@this"और जोड़ें <p:messages autoUpdate="true">(या पंक्तिबद्ध लेकिन अविवादित संदेशों के लिए बस सर्वर लॉग पढ़ें) और आप देखेंगे कि वास्तव में रूपांतरण / सत्यापन त्रुटि हुई है।
बालूसी

आपने यह प्रश्न क्यों हटाया है stackoverflow.com/questions/60673695/…
कुक्टेलजे

मैंने सोचा कि यह अब बहुत अधिक मूल्य प्रदान नहीं कर सकता है ... मैंने इसे हटा दिया।
कवु

9

मैं एक और बात का जिक्र करूंगा जिसमें प्राइमफेस की चिंता है p:commandButton!

जब आप p:commandButtonसर्वर पर किए जाने वाले कार्य के लिए उपयोग करते हैं, तो आप उपयोग नहीं कर सकते type="button"क्योंकि यह पुश बटन के लिए है जो कि सर्वर के लिए ajax / non-ajax अनुरोध किए बिना कस्टम जावास्क्रिप्ट निष्पादित करने के लिए उपयोग किया जाता है।

इस उद्देश्य के लिए, आप typeविशेषता (डिफ़ॉल्ट मान है "submit") को हटा सकते हैं या आप स्पष्ट रूप से उपयोग कर सकते हैं type="submit"

आशा है कि यह किसी की मदद करेगा!


हमारे पृष्ठों में से एक में यह मेरी मुख्य समस्या थी, स्वीकृत उत्तर में किसी भी बिंदु ने हमें करीब नहीं लाया, आपको यह जानकारी कहां से मिली?
यूरिल अरविजु

खैर, मुझे वह समस्या कई बार हुई है, और मैंने शोध किया और पाया कि विशेषता p:commandButtonके कई मूल्य हैं type, और buttonवह है जो ग्राहक पक्ष की हर चीज की चिंता करता है। यह Primefacesडॉक्टर में इसे खोजना थोड़ा कठिन है , लेकिन यहाँ एक लिंक है: developer.am/primefaces/…
akelec

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

धन्यवाद, यह मेरी खुशी है। मैंने जानबूझकर यह जवाब दिया क्योंकि हममें से बहुतों को ऐसी समस्या थी। मुझे कुछ दिनों के लिए भी पता चला कि क्या है।
akelec

3

खुद इस मुद्दे पर अटक गया और इस समस्या का एक और कारण पाया। यदि आपके पास अपने .xhtml में उपयोग की गई संपत्तियों के लिए आपके बैकिंग बीन में सेटर विधियां नहीं हैं, तो कार्रवाई बस लागू नहीं है।


5
इसका परिणाम स्व-व्याख्यात्मक होना चाहिए PropertyNotWritableException। यदि आपने इसे नहीं देखा है, तो शायद आपने उचित ajax अपवाद हैंडलर के बिना ajax अनुरोध को निकाल दिया है, लेकिन आपको इसे सर्वर लॉग में देखना चाहिए।
बालुस

3
यह तब तक नहीं दिखा, जब तक कि मैंने पी: कमांडबटन का अजाक्स = "झूठा" नहीं बना दिया।
दानवीर २४'१३

धन्यवाद भगवान आपने मेरी जान बचाई
१२ '१५'१

3

मैं हाल ही में एक समस्या में भाग गया UICommand एक JSF 1.2 आईबीएम विस्तारित चेहरे घटकों का उपयोग कर आवेदन में नहीं।

मेरे पास <hx:datatable>डिटेटेबल (विस्तारित संस्करण, इसलिए ) की एक पंक्ति पर एक कमांड बटन था और UICommand मेज से कुछ पंक्तियों से आग नहीं लगाएगा (जो पंक्तियां आग नहीं लगेंगी वे डिफ़ॉल्ट पंक्ति प्रदर्शन आकार से अधिक पंक्तियां थीं)।

मेरे पास प्रदर्शित करने के लिए पंक्तियों की संख्या का चयन करने के लिए एक ड्रॉप-डाउन घटक था। इस क्षेत्र में समर्थन मूल्य था RequestScope। तालिका का डेटा अपने आप में एक प्रकार का था ViewScope(वास्तव में, अस्थायी रूप से SessionScope)।

यदि पंक्ति प्रदर्शन को नियंत्रण के माध्यम से बढ़ाया गया था जो मूल्य भी datatable के लिए बाध्य था rows विशेषता के , तो इस परिवर्तन के परिणामस्वरूप प्रदर्शित होने वाली कोई भी पंक्ति UICommand को क्लिक करने पर आग नहीं लगा सकती थी।

इस विशेषता को उसी दायरे में रखने से तालिका डेटा स्वयं समस्या को ठीक करता है।

मुझे लगता है कि यह ऊपर BalusC # 4 में दिया गया है, लेकिन न केवल टेबल वैल्यू को देखने या सत्र को स्कूप करने की आवश्यकता है, बल्कि उस टेबल पर प्रदर्शित करने के लिए पंक्तियों की संख्या को नियंत्रित करने वाली विशेषता भी है।


2

मुझे भी यह समस्या थी और केवल ब्राउजर के वेब कंसोल को खोलने के बाद मूल कारण पर विचार करना शुरू किया। इससे पहले तक, मुझे कोई त्रुटि संदेश (यहां तक ​​कि साथ <p:messages>) प्राप्त करने में असमर्थ था । वेब कंसोल ने HTTP 405 स्टेटस कोड दिखाया है जो वापस आ रहा है<h:commandButton type="submit" action="#{myBean.submit}">

मेरे मामले में, मुझे अपने आवेदन विचारों और व्यावसायिक तर्क को अंजाम देने वाले वेनिला हेटस्पर्शलेट का ऑथेंटिकेशन और जेएसएफ फेसलेट्स और बीन्स के माध्यम से ऑथ ऑथेंटिकेशन प्रदान करने का मिश्रण है।

एक बार जब मैंने अपना web.xml रिफ़्लेक्ट किया, और एक मिडिल-मैन-सर्वलेट को हटा दिया, तो उसने "जादुई रूप से" काम किया।

निचला रेखा, समस्या यह थी कि मध्यम-मैन-सर्वलेट HttpServlet वातावरण से JSF परिवेश में पुनर्निर्देशित करने के लिए RequestDispatcher.forward (...) का उपयोग कर रहा था, जबकि इससे पहले कहा जा रहा सर्वलेट HttpServletResponse.sendRedirect (..) के साथ पुनर्निर्देशित किया जा रहा था। ।)।

मूल रूप से, SendRedirect () का उपयोग करके JSF "कंटेनर" को नियंत्रण में लेने की अनुमति दी गई, जबकि RequestDispatcher.forward () स्पष्ट रूप से नहीं थी।

मुझे नहीं पता कि फेसलेट बीन गुणों का उपयोग करने में सक्षम क्यों था, लेकिन उन्हें सेट नहीं कर सका, और यह स्पष्ट रूप से सर्वलेट्स और जेएसएफ के मिश्रण के साथ दूर करने के लिए चिल्लाता है, लेकिन मुझे उम्मीद है कि इससे किसी को सिर के कई घंटों से बचने में मदद मिलती है- टू-टेबल-पीटने।


1

मैं एक मुद्दा है, जहां एक डिबगिंग बहुत मज़ा आता था <h:commandLink>में की कार्रवाई richfaces datatableआग से इनकार कर दिया। तालिका किसी बिंदु पर काम करती थी लेकिन बिना किसी स्पष्ट कारण के रुक गई। मैंने कोई कसर नहीं छोड़ी, केवल यह पता लगाने के लिए कि मेरी rich:datatableगलत का उपयोग कर रहा था rowKeyConverterजो कि उन नलियों को लौटाता था जो अमीर लोग खुशी से पंक्ति कुंजियों का उपयोग करते थे। इसने मेरी <h:commandLink>कार्रवाई को रोक दिया ।


0

एक और संभावना: यदि लक्षण यह है कि पहले मंगलाचरण काम करता है, लेकिन बाद वाले नहीं करते हैं, तो आप जेएसएफ 2.2 के साथ प्राइमफेस 3.x का उपयोग कर सकते हैं, जैसा कि यहां विस्तृत है: कोई ViewState नहीं भेजा गया है


-1

मैंने अपनी समस्या को हल करने के साथ तय किया:

<h:commandButton class="btn btn-danger" value = "Remove" action="#{deleteEmployeeBean.delete}"></h:commandButton>

में:

<h:form>
     <h:commandButton class="btn btn-danger" value = "Remove" action="#{deleteEmployeeBean.delete}"></h:commandButton>
</h:form>

यह 600 उत्क्रमित उत्तर में # 1 है। इसे अलग उत्तर के रूप में लिखने की आवश्यकता नहीं है।
कुकटेलजे 19

-1

यह समाधान है, जो मेरे लिए काम किया है।

<p:commandButton id="b1" value="Save" process="userGroupSetupForm"
                    actionListener="#{userGroupSetupController.saveData()}" 
                    update="growl userGroupList userGroupSetupForm" />

यहां, अजाक्स कॉल के लिए प्रक्रिया = "userGroupSetupForm" एट्रिब्यूट अनिवार्य है। ActionListener @ViewSope बीन से एक विधि कह रहा है। इसके अलावा बढ़ते संदेश, अद्यतन करने योग्य: उपयोगकर्तासमूह उपयोगकर्ता और फ़ॉर्म: userGroupSetupForm।


-2
<ui:composition>  
  <h:form id="form1">
    <p:dialog id="dialog1">
      <p:commandButton value="Save" action="#{bean.method1}" /> <!--Working-->
    </p:dialog>
  </h:form>

  <h:form id="form2">
    <p:dialog id="dialog2">
      <p:commandButton value="Save" action="#{bean.method2}" /> <!--Not Working-->
    </p:dialog>
  </h:form>
</ui:composition>

समाधान करना;

<ui:composition>  
  <h:form id="form1">
    <p:dialog id="dialog1">
      <p:commandButton value="Save" action="#{bean.method1}" />   <!-- Working  -->
    </p:dialog>

    <p:dialog id="dialog2">
      <p:commandButton value="Save" action="#{bean.method2}" />   <!--Working  -->
    </p:dialog>
  </h:form>
  <h:form id="form2">
    <!-- ..........  -->
  </h:form>
</ui:composition>

क्षमा करें, लेकिन यह मेरी विनम्र राय में है पूरी तरह से सच नहीं है। आप प्रभावी रूप से बताते हैं कि काम करने के लिए 2 संवादों को अपने स्वयं के रूप में होना चाहिए। आपके पास 99% निश्चितता के साथ एक अलग समस्या थी जिसे आपने हल किया और जिसके लिए अब आपको लगता है कि यह समाधान है ...
कुक्टेलजे

यह पेज शामिल है। शायद यह समस्या का कारण हो सकता है। आपको मतदान से पहले इसका परीक्षण करना चाहिए।
केनन गोकक

नहीं, आपको पोस्ट करने से पहले एक न्यूनतम प्रतिलिपि प्रस्तुत करने योग्य उदाहरण बनाया जाना चाहिए (और केवल तब मैं परीक्षण कर सकता हूं) ... और हां इसमें संवादों और रूपों के साथ समस्याएं भी हो सकती हैं, लेकिन फिर समस्या अभी भी नहीं है जो आप यहां हल करना चाहते हैं। । आप पहला उदाहरण पूरी तरह से ठीक हैं और दूसरा 100% निश्चितता के साथ एक गैर-मौजूद समस्या का समाधान नहीं है
कुक्टेलजे

वैसे भी। मेरा काम ठीक है। मुझे लगता है कि यह महत्वपूर्ण नहीं है कि फ़ॉर्म में संवाद बॉक्स कहाँ है। मुझे एक और समस्या के समाधान के लिए दूसरा रूप तैयार करना होगा।
केनान गोकक जूल

आपका आवेदन काम कर सकता है, लेकिन यह एक मूल समस्या और आपके 'समाधान से स्पष्ट / दृश्यमान नहीं है। इसके अलावा, आप कहते हैं _ "मुझे लगता है कि यह महत्वपूर्ण नहीं है कि फ़ॉर्म में संवाद बॉक्स कहाँ है।" _ लेकिन आपके उत्तर में यह महत्वपूर्ण है कि वे कहाँ हैं। एक विरोधाभास जो मेरे बयान का समर्थन करता है। क्षमा करें, लेकिन आपका उत्तर स्पष्ट नहीं है ... (इस पर पहले से ही एक और
डाउनवोट है
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.