2011-11-17 9 views
6

मुझे कमांड बटन के साथ एक डाटाटेबल अपडेट करके कुछ समस्याएं आ रही हैं।प्राइमफेस - कमांड के साथ अद्यतन डेटा अपडेट करें

<div class="grid_16"> 
    <h:form id="list"> 
     <p:messages></p:messages> 
     <p:dataTable styleClass="result-table" var="user" id="usersList" 
     value="#{listUsersController.users}" widgetVar="userTable" 
     paginator="true" rows="10" paginatorAlwaysVisible="false"> 
     <f:facet name="header"> 
      Listado de usuarios 
     </f:facet> 
     <p:column> 
      <f:facet name="header"> 
       <h:outputText value="#{cms['users.username']}" /> 
      </f:facet> 
      #{user.username} 
     </p:column> 
     <p:column> 
      <f:facet name="header"> 
       <h:outputText value="#{cms['users.name']}" /> 
      </f:facet> 
      #{user.name} 
     </p:column> 
     <p:column> 
      <f:facet name="header"> 
       <h:outputText value="#{cms['users.lastname']}" /> 
      </f:facet> 
      #{user.lastname} 
     </p:column> 
     <p:column> 
      <f:facet name="header"> 
       <h:outputText value="#{cms['users.active']}" /> 
      </f:facet> 
      #{user.active} 
     </p:column> 
     <p:column> 
      <f:facet name="header"> 
       <h:outputText value="#{cms['general.actions']}" /> 
      </f:facet> 
      <p:commandButton value="Eliminar" image="ui-icon-trash" 
       actionListener="#{listUsersController.deleteUser}" 
       update="list:usersList"> 
       <f:param name="user" value="#{user.id}" /> 
      </p:commandButton> 
     </p:column> 
     </p:dataTable> 
    </h:form> 
</div> 

समस्या है जब CommandButton कि कार्रवाई listUsersController.deleteUser करता है पर क्लिक है: यह एक्सएचटीएमएल फ़ाइल है। विधि सफलतापूर्वक निष्पादित की गई है और उपयोगकर्ता हटा दिया गया है। लेकिन डेटाटेबल अपडेट नहीं किया गया है। मैं चाहता हूं कि हटाए गए रिकॉर्ड अब AJAX के साथ सूची में दिखाई न दें।

मैं पहले से ही update="@form", update="@parent", update="@all", update="usersList", update=":list:usersList" के साथ परीक्षण किया और कुछ भी नहीं काम करता है।

यह managedBean में विधि है:

public String deleteUser() { 
     try { 
      FacesContext fc = FacesContext.getCurrentInstance(); 
      Map<String, String> params = fc.getExternalContext().getRequestParameterMap(); 
      int id = Integer.parseInt(params.get("user")); 
      userService.removeUserById(id); 
      FacesContext.getCurrentInstance().addMessage 
      (null,new FacesMessage(FacesMessage.SEVERITY_INFO,MessageProvider.getMessageProvider() 
      .getValue("cms","users.error.userDoesNotExist"),"")); 
      return SUCCESS; 
     } catch (EntityNotFoundException e) { 
      FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_ERROR,MessageProvider 
        .getMessageProvider().getValue("cms","users.error.userDoesNotExist"),"")); 
      return ERROR; 
     } 
    } 

उत्तर

9

हटाने के बाद आपको डीबी से users पुनः लोड करने की आवश्यकता है।

तो, अकेले

userService.removeUserById(id); 

के बजाय आप

userService.removeUserById(id); 
users = userService.list(); 
+0

आपको बहुत बहुत धन्यवाद। मुझे नहीं पता कि मैं इसे क्यों भूल गया। सूची को फिर से लोड करना बहुत अच्छा काम करता है! – jacruzca

0

यह आप, DB में उपयोगकर्ता को हटाने से कर रहे हैं अगर आप एक का उपयोग करें, और लगता है की सूची से नहीं - #{listUsersController.users} ...

आप चाहिए विधि से कोड पोस्ट करें: userService.removeUserById(id); मैं यह नहीं बता सकता कि वहां क्या हो रहा है लेकिन यदि आप उपयोगकर्ता सूची को अपडेट नहीं कर रहे हैं, तो डेटाटेबल अपडेट नहीं किया जाएगा (सफलतापूर्वक) अपडेट नहीं किया जाएगा!

+0

धन्यवाद करना चाहिए। मैं सूची अद्यतन करना भूल गया। अब यह काम कर रहा है। – jacruzca

0

ऐसा लगता है कि डेटाटेबल रीफ्रेशिंग नहीं है, अपडेट = ": उपयोगकर्ता सूची" या अपडेट = ": सूचियों: उपयोगकर्ता सूची" का उपयोग करने का प्रयास करें, ':' इसे रूट से शुरू होने वाली आईडी को देखने के लिए कह रहा है। वर्तमान में ऐसा लगता है कि यह आईडी को अपडेट करने के लिए नहीं ढूंढ सकता है। इसके बजाय, इसे एक पी में रखें: outputPanel, इसे एक आईडी दें और फिर अपडेट = ": पैनल" जैसे कुछ करें। मुझे लगता है कि काम करेगा।

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