2013-10-02 17 views
6

Kullanıcının tablodaki satır verilerini düzenlemesine olanak tanıyan yüz yüzlerinin özelliğini kullanmaya çalışıyorum. Bu bağlantıyı başardım. o: Ben düzenleme kullanıcıyı derkenevent.getObject() satır içi düzenlemede, ilk değerleri çekirdek değerine gönderir

http://www.primefaces.org/showcase/ui/datatableRowEditing.jsf

bean.It gönderilmez girilir yeni değerler hala sadece eski değerlerini gösterir.

JSF Benim kod: fasulye

<p:dataTable value="#{mybean.userList}" 
     var="item" 
     id="dataTab" 
     widgetVar="usersTable" 
     tableStyleClass="data" paginator="true" rows="5" 
     filteredValue="#{userController.filteredUsers}" 
     editable="true" 
     rowKey="#{item}"> 

    <p:ajax event="rowEdit" listener="#{mybean.onEdit}" update=":userForm:growl" /> 
    <p:ajax event="rowEditCancel" listener="#{mybean.onCancel}" update=":userForm:growl" /> 
    <f:facet name="header"> 
     <p:outputPanel> 
      <h:outputText value="Search all fields:" /> 
      <p:inputText id="globalFilter"  onkeyup="('usersTable').filter()" style="width:150px" /> 
     </p:outputPanel>  
    </f:facet> 


    <p:column sortBy="#{item.firstName}" filterBy="#{item.firstName}" 
     filterMatchMode="startsWith"> 
     <p:cellEditor> 
      <f:facet name="header"> 
       <h:outputText value="First Name" /> 
      </f:facet> 
      <f:facet name="output"> 
       <h:outputText value="#{item.firstName}" /> 
      </f:facet> 
      <f:facet name="input"> 
       <p:inputText value="#{item.firstName}" style="width:100%"/> 
      </f:facet> 
     </p:cellEditor> 
    </p:column> 
    <p:column sortBy="#{item.lastName}" filterBy="#{item.lastName}" filterMatchMode="startsWith"> 
     <p:cellEditor> 
      <f:facet name="header"> 
       <h:outputText value="Last Name" /> 
      </f:facet> 

      <p:column headerText="Update" style="width:6%"> 
       <p:rowEditor /> 
      </p:column>  


</p:dataTable> 

Kodum: ui listeyi almak için fasulye

public String onEdit(RowEditEvent event) { 
    User user=(User)event.getObject()); 
    user.getFirstName(); 
} 

kodu:

public List<UserBean> getUsersList(){ 
     List<UserBean> retval = new ArrayList<>();    
     for (Object[] tuple : myFacade.getUserList()) { 
      UserBean ub = new UserBean(); 
      ub.setFirstName((String) tuple[0]); 
      ub.setLastName((String)tuple[1]); 
      ub.setEmailAddress((String)tuple[2]); 
      ub.setOfficeNumber((String)tuple[3]); 
      ub.setRole((String)tuple[4]);     
      retval.add(ub); 
     } 
     return retval; 
    } 

denedim Bazı yayınlarda verilen öneriler ancak işe yaramadı.Kullanıcı bana yeni değerleri nasıl alabilirim? lassfish 4.0, primefaces 3.5.

+0

Diğer olası sorunların yanı sıra, kodunuz JSF etiketlerini düzgün şekilde kapatmaz. Bu bir kopya ve yapıştırma sorunu muydu? – patstuart

+0

, dönüşüm/doğrulama başarısız gibi görünüyor. Bunu doğrulamak için formunuza bir ileti bileşeni ekleyebilir misiniz? – kolossus

+0

@patstuart evet sadece bir kopyala yapıştır hatasıdır ve jsf sayfamda iyidir. – Valla

cevap

8

Sorunu anlayabildim.Ödeme yöntemindeki listeyi aldığımda veriyi yüklemek için veritabanını arıyorum.Ancak bu yalnızca liste boşsa yapılmalıdır.

public List<UserBean> getUsersList(){ 


     if(retval == null) 
     { 
      retval = new ArrayList<>(); 

      for (Object[] tuple : myFacade.getUserList()) { 
      UserBean ub = new UserBean(); 
      ub.setFirstName((String) tuple[0]); 
      ub.setLastName((String)tuple[1]); 
      ub.setEmailAddress((String)tuple[2]); 
      ub.setOfficeNumber((String)tuple[3]); 
      ub.setRole((String)tuple[4]); 

      retval.add(ub); 
     } 
     } 
     return retval; 
    } 

Yani getUsersList p var benim değerdir: kodunu aşağıdaki size net bir görüntü verir eğer öyleyse Datatable ve ben onEdit çağırdığınızda şimdi listede kontrol edecektir boş öyle bir veritabanı arama veya veritabanını çağırmaz.

+0

Aynı problem vardı ve bu doğru cevap. Teşekkürler! – akelec

+2

Getters'da iş mantığının yapılması tavsiye edilmez.Bunun yerine, fasulyenizi başlatmak için 'f: viewAction' gibi bir yöntem kullanın. –