2012-01-10 15 views
7

के बाद डेटाटेबल अपडेट नहीं होता है मेरे पास डेटा तालिका है। तालिका की प्रत्येक पंक्ति में commandButton'निकालें' है, जिसे मॉडल और दृश्य से उस पंक्ति को निकालना और स्थान में अपडेट करना है। एक पाद लेख के रूप में, मेरे पास है जिसे 'हर पंक्ति को हटाएं' कहा जाता है।सफल अजाक्स कॉल

अंतिम बटन काम करता है। मैं उस पर क्लिक करता हूं, मॉडल से प्रत्येक पंक्ति हटा दी जाती है (यानी ArrayList जिसमें तत्व खाली हो जाते हैं) और dataTable और footer facet दृश्य में पुनः प्रस्तुत (या अपडेट किया गया) है।

दूसरी तरफ, जब मैं पंक्तियों में से किसी एक पर क्लिक करता हूं, इसे हटाने के लिए, यह आंशिक रूप से काम करता है। इसी तत्व को मॉडल से हटा दिया गया है लेकिन दृश्य अपडेट नहीं किया गया है। वह पंक्ति अभी भी dataTable में है और footer facet नहीं बदला है।

मेरे पास users.xhtml में कोड का निम्न भाग है।

<f:metadata> 
    <f:viewParam name="id" value="#{users.id}" /> 
    <f:event type="preRenderView" listener="#{users.init}" /> 
</f:metadata> 

... 

<h:form id="usersForm"> 
    <p:outputPanel>  
     <p:dataTable id="userTable" value="#{users.user.friendList}" var="friend"> 
      <p:column> 
       <h:outputText value="#{friend.name}" /> 
      </p:column> 
      <p:column> 
       <p:commandButton action="#{users.user.removeFriend(friend)}" 
        ajax="true" 
        update="userTable somethingElse" process="@this" 
        onerror="errorDialog.show();" 
        icon="ui-icon-delete" 
        title="delete user"> 
       </p:commandButton> 
      </p:column> 

      <f:facet id="somethingElse" name="footer"> 
        aye: ${users.user.xxx} 
      </f:facet> 
     </p:dataTable> 

    </p:outputPanel> 

    <p:commandButton action="#{users.user.removeAllFriends()}" ajax="true" 
       update="userTable somethingElse" 
       process="@this" 
       icon="ui-icon-close" 
       value="delete all friends?"> 
    </p:commandButton> 


</h:form> 

तो, आपको यहां क्या समस्या है?

मैं JSF 2.0 और Primefaces उपयोग कर रहा हूँ 3.0

+0

एक समस्या में कई प्रश्न पूछें नहीं। प्रति सवाल एक प्रश्न, कृपया :) मैंने दूसरे प्रश्न को संपादित किया है। इसके अलावा जुड़ा हुआ पिछला प्रश्न बिल्कुल भी संबंधित नहीं है। यह शायद एक ही कोड है, लेकिन समस्या बिल्कुल वही नहीं है। आपकी वर्तमान समस्या के अनुसार: आप किस पीएफ संस्करण का उपयोग कर रहे हैं? यदि आप 'अपडेट = "@ फॉर्म" का उपयोग करते हैं तो क्या होगा? – BalusC

+0

बुरे शब्दों के लिए खेद है, लेकिन एक बार फिर से बहुत धन्यवाद :) कई प्रश्नों के बारे में, मैं अगली बार अपना सर्वश्रेष्ठ प्रयास करने की कोशिश करूंगा :) –

+0

मैंने इसे उत्तर के रूप में दोबारा पोस्ट किया :) – BalusC

उत्तर

11

को अपने पिछले जवाब देखें। यदि आप update="@form" का उपयोग करते हैं तो यह काम करेगा। मेरे पास वास्तव में वास्तविक कारण की जांच करने का समय नहीं है ताकि मैं इसे पीएफ लोगों को रिपोर्ट कर सकूं, क्योंकि यह समस्या सभी पृष्ठों में प्रकट नहीं होती है। यहां तक ​​कि एक ही टेबल में, एक अलग बटन इरादे के रूप में काम करता है।

<p:commandButton update="@form" ... /> 

अद्यतन:

इसे आज़मा कर देखें इसके बारे में सोचने के लिए आ रहा है, यह हो सकता है process="@this" की उपस्थिति से संबंधित है।

+0

मुझे आपके उत्तर को बेहतर पसंद है क्योंकि यह अधिक कुशल और साफ है। मुझे आश्चर्य है कि क्या यह फिक्स प्राइमफ़ेस 2.2.1 पर चल रहे ऐप्स के लिए भी काम करेगा? मुझे इसका परीक्षण करना होगा और पता लगाना होगा कि मेरे पास अधिक समय है। –

+0

मेरे पास पीएफ 3.2 में एक मौजूदा प्रोजेक्ट है और यह अभी भी एक मुद्दा है। क्या किसी को पता है कि यह बाद के संस्करण में तय किया गया है? – Catfish

+0

@ कैटफ़िश: इसे पीएफ 3.4 में स्वीकार किया गया है और तय किया गया है: http://stackoverflow.com/questions/12516397/how-to-ajax-update-the-pdatatable-from-inside-the-pdatatable-itself/12517181# 12517181 – BalusC

1

आप शायद Primefaces 2.2.1 का उपयोग कर रहे के रूप में इस लगता है जैसे कि यह Primefaces DataTable घटक के साथ एक आम बग के कारण है। अनिवार्य रूप से क्या होता है कि डेटाटेबल के तत्वों के भीतर से होने वाले AJAX पोस्टबैक के परिणामस्वरूप डेटाटेबल में तत्वों का आंशिक पृष्ठ अपडेट नहीं होगा।

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

मैं इस समस्या को प्रपत्र पहचान हमारे वर्तमान पीएफ 3.0 पृष्ठों में से एक इस समस्या Here

+0

मैं वास्तव में प्राइमफ़ेस 3.0 का उपयोग कर रहा हूं। क्या यह भी बग है? –

+0

यह मेरी धारणा थी कि यह 3.0 में तय किया गया था, हालांकि मैं 3.0 का उपयोग नहीं कर रहा हूं जो अभी तक इसमें भाग लेना चाहता है। –

+0

ठीक है, उत्तर के लिए धन्यवाद! –

1

आप घटकों को अद्यतन करने के लिए सर्वर आईडी का उपयोग करना चाहते हैं (जैसे userTable, somethingElse, ...), इन घटकों घटक है जो अद्यतन (उदाहरण के लिए अपने बटन) से चलाता है के रूप में ही नामकरण कंटेनर में होना चाहिए। अन्यथा आपको अद्यतन विशेषता के भीतर इस तरह की अभिव्यक्ति का उपयोग करने की आवश्यकता है: update=":usersForm:userTable"

मुख्य समस्या नामकरण कंटेनरों की पहचान करना है। बाहरी बटन काम करता है, क्योंकि यह आईडी userTable के साथ तालिका के समान नामकरण कंटेनर (फॉर्म) में है।पहलू को अपडेट किया जाता है क्योंकि पूरी तालिका अपडेट हो जाती है, लेकिन चूंकि डेटाटेबल नामकरण कंटेनर है, इसलिए बाहरी बटन पर केवल update="somethingElse" का उपयोग करके पाद लेख को अपडेट करना संभव होना चाहिए।

मुझे यकीन नहीं है, आंतरिक बटन क्यों काम नहीं करता है। मुझे लगता है कि डेटाटेबल के भीतर एक और नामकरण कंटेनर है। प्राइमफेस एक INFO लॉग करता है, यदि UIComponent कार्यान्वयन के findComponent एल्गोरिदम का उपयोग करके घटक नहीं मिला। INFO: Cannot find component with identifier "userTable" in view.

0

यह JSF 2,0

<p:dataTable id="empl1" var="emp" value="#{dtEmployeeView.employee}" selectionMode="multiple" rowKey="#{emp.id}" 
           paginator="true" rows="5" tableStyleClass="ui-table-columntoggle"> 
    <p:column width="20" headerText="Id" priority="1"> 
     <h:link value="#{emp.id}" /> 
    </p:column> 
    <p:column headerText="Employee Name" priority="2"> 
     <h:outputText value="#{emp.pname}" /> 
    </p:column> 

</p:dataTable> 
<p:commandButton update="form1:empl1" ajax="true" value="Submit" action="#{empService.addEmployee(employee)}" > 
    <f:event type="preRenderView" listener="#{dtEmployeeView.init()}"/> 
</p:commandButton> 
0

मैं अपने datatable में फिल्टर था में ताज़ा करने के लिए समाधान है। तो यहां मैंने

oncomplete="PF('myWidgetVar').filter()" and update="@form" 
संबंधित मुद्दे