在p:dataTable中执行行编辑时出错

时间:2016-01-20 10:38:15

标签: jsf primefaces

我正在尝试在primefaces数据库中执行行编辑。我的问题是当我在CellEditor中输入inputText中的新值时 然后单击编辑(primefaces图标)onCellEdit方法成功调用,但不选择inputText中的新值,它选择最初在数据表中的值。我究竟做错了什么?我正在使用primefaces 3.5 这里是jsf代码

<h:form id="form1">
        <p:growl id="messages" showDetail="true"/>
        <p:panel header="Registered Devices" style="min-height: 400px;" id="paneldevices">
        <p:dataTable  emptyMessage="No Device Registered"  editable="true"  widgetVar="deviceTable" id="idGrid" value="#{deviceMgdBean.devices}" var="item" >
        <p:ajax  event="rowEdit" listener="#{deviceMgdBean.onCellEdit()}" update=":form1:messages"/>
        <p:ajax event="rowEditCancel" listener="#{deviceMgdBean.onCancel}" update=":form1:messages" />
        <p:column headerText="Options" style="width:50px">  
         <p:rowEditor  />  
        </p:column> 
        <p:column>
        <f:facet name="header">
        <h:outputText value="Device_name"/>
        </f:facet>
        <p:cellEditor>  
        <f:facet name="output">  
       <h:outputText value="#{item.device_name}"/>
       </f:facet>  
       <f:facet name="input">  
      <p:inputText value="#{item.device_name}"  style="width:80%"  />
      </f:facet>  
       </p:cellEditor>                                    
       </p:column>
       </h:form>

这是我的托管Bean

 @ManagedBean
    @ViewScoped
    public class DeviceMgdBean implements Serializable {
        public List<Devices> getDevices()
        {
            List<Devices> l=getDevdao().getDevices();//devices fetched from database

            return l;
        }
             public void onCellEdit(RowEditEvent event)
             {  
               Devices devo=(Devices) event.getObject();
               FacesMessage msg = new FacesMessage("Device Edit","Test:"+devo.getDeviceName());  
               FacesContext.getCurrentInstance().addMessage(null, msg);  
             }  

        public void onCancel(RowEditEvent event)
        {  
            FacesMessage msg = new FacesMessage("Item Cancelled");   
            FacesContext.getCurrentInstance().addMessage(null, msg); 
            Devices devo=(Devices) event.getObject();
        }



    }
    class Devices {
    private int device_id;
    private String device_name;
    //getter and setters

    }

1 个答案:

答案 0 :(得分:0)

private List<Devices> l;
public List<Devices> getDevices() {
   if(l==null) l=getDevdao().getDevices();//devices fetched from database
   return l;
}