2010-09-07 8 views
7

मेरे जेएसएफ पेज में मेरे पास एक कम्बोबॉक्स है जो एक टेबल को अपडेट करता है जब कम्बोबॉक्स का कोई आइटम चुना जाता है।जेएसएफ अजाक्स अपडेट कमांड लिंक्स पहले क्लिक पर विफल रहता है

तालिका में एक संपादन लिंक वाले आइटम हैं।

समस्या तब होती है जब तालिका को combobox द्वारा बदला जाता है, आपको पृष्ठ पर जाने के लिए लिंक पर दो बार क्लिक करने की आवश्यकता होती है। पहला क्लिक पेज को रीफ्रेश करें।

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:ui="http://java.sun.com/jsf/facelets"> 
    <body> 
     <ui:composition template="/template.xhtml"> 
      <ui:define name="windowTitle">Comment packages</ui:define> 
      <ui:define name="content"> 
       <h3>Select the package to comment.</h3> 
       <h:form prependId="false"> 
        Section: 
        <h:selectOneMenu id="selectSection" value="#{platformService.currentSection}"> 
         <f:ajax render=":list-packages" /> 
         <f:selectItems value="#{platformService.releasePlatform.sections}" /> 
        </h:selectOneMenu> 
       </h:form> 
       <p/> 
       <h:panelGroup id="list-packages"> 
        <h:dataTable id="packageList" var="package" value="#{packageService.packages}" border="1" > 
         <h:column> 
          <f:facet name="header">Package name</f:facet> 
          #{package.name} 
         </h:column> 
         <h:column> 
          <h:form> 
           <h:commandlink action="#{commentService.commentPackage}" value="Comment"> 
            <f:param name="packageName" value="#{package.name}" /> 
           </h:commandLink> 
          </h:form> 
         </h:column> 
        </h:dataTable> 
       </h:panelGroup> 
      </ui:define> 
     </ui:composition> 
    </body> 
</html> 

मैं भी CommandButton के साथ की कोशिश की है लेकिन आप यह भी बटन पर दो बार क्लिक करने की जरूरत:

यहाँ एक्सएचटीएमएल है।

मै मैनेज/जेटी में जेएसएफ 2.0.1-एफसीएस चला रहा हूं।

+0

क्यों है: "सूची-पैकेज" नहीं "सूची-पैकेज" f में: AJAX रेंडर विशेषता? शायद यह समस्या है? शायद टेबल फिर से प्रस्तुत नहीं किया गया है? – amorfis

+1

':' इसलिए है क्योंकि प्रस्तुत करने वाला घटक फ़ॉर्म के बाहर है। http://ocpsoft.com/java/jsf2-java/how-to-jsf-2-0-render-components-outside-of-the-form/ तालिका को अद्यतन/सही ढंग से प्रस्तुत किया गया है लेकिन इसमें लिंक पृष्ठ पर जाने के लिए तालिका को दो बार क्लिक करने की आवश्यकता है। – Anthony

उत्तर

4

यह तब काम करता है जब आप तालिका को एक <h:form> के अंदर डालते हैं। कॉलम से आंतरिक <h:form> हटाएं और <h:panelGroup id="list-packages"><h:form id="list-packages"> से प्रतिस्थापित करें।

मुझे यकीन नहीं है कि यह समस्या क्यों होती है (जांच के लिए और अधिक समय की आवश्यकता होती है) लेकिन यह शायद इस तथ्य से संबंधित है कि तालिका की स्थिति जानना महत्वपूर्ण है कि कौन सी पंक्ति का चयन किया गया था।

2

यह समस्या JSF bug के कारण होने की संभावना है, जहां आप किसी अन्य फॉर्म से अपडेट किए गए फॉर्म वाले AJAX लक्ष्य नहीं रख सकते हैं। समस्या को एक spec मुद्दा के रूप में माना जा रहा है और here ट्रैक किया गया है। अगर आप किनारे पर रहना पसंद करते हैं तो बग रिपोर्ट में jsf.js को संपादित करने के लिए एक वर्कअराउंड होता है।

AJAX के उपयोग के साथ और निष्पादन के साथ सर्वर को सबमिट किए जाने वाले नियंत्रण को नियंत्रित करने की क्षमता = मुझे व्यक्तिगत रूप से लगता है कि प्रति पृष्ठ एक फॉर्म का उपयोग करने के लिए एक अच्छी बहस है (कुछ फ़ाइल अपलोड और संवाद जैसे दुर्लभ परिस्थितियों को छोड़कर बॉक्स कार्यान्वयन), और आप आसानी से भूलने वाले नामकरण कंटेनर दुर्घटनाओं और इस तरह की समस्याओं से पकड़े नहीं जाते हैं।

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