DataTable空值

时间:2014-12-31 16:04:38

标签: primefaces datatable null

请这是非常重要我遇到了大麻烦,我试图解决它4天前没有成功。 我有一个使用cellEdit的主要面孔DataTable 但是当我尝试获取值时,它会在我更改之前得到相同的值。

这是我的XHTML页面

    <center>  
      <h:form >
            <p:calendar value="#{programmeBean.date1}" showOn="button" pattern="yyyy-MM-dd" />    
            <p:commandButton value="OK" type="Submit"  actionListener="#{programmeBean.click}"       update=":content:cld:data1"  />
        </h:form>
        <br/><br/>      
    </center>    

    <p:growl id="msgs" showDetail="true"/>
    <p:commandButton styleClass="button" value="Ajouter" oncomplete="PF('v_dialogCreatInter').show();" update=":content:dialogCreatInter"  />
    <p:dataTable id="data1" var="proginter" value="#{programmeBean.listeAll}"
                 editable="true" 
                 editMode="cell" 
                 widgetVar="cellInter"
                 styleClass="hovered striped table tblDataTable"
                 rowStyleClass="#{proginter.programme.operationSuivante lt programmeBean.date1 ? 'colorR' :'no' }" 
                 >          
      <!--editer la ligne selectionner-->
       <p:ajax event="cellEdit" listener="#{programmeBean.onCellEdit(proginter)}" update=":content:cld:msgs"   />
        <f:facet name="header" class="ui-toolbar ui-widget-header" > 
            <h:outputText value=" Search all fields: " styleClass="searchOutputText" style="font-size: 1.2em"/> 
            <p:inputText id="globalFilter" onkeyup="PF('cellInter').filter()"  placeholder="Enter keyword"   styleClass="searchInputText" style="font-size: 1.2em" />
        </f:facet>
        <p:column  sortBy="#{proginter.programme.equipement.designation}" filterBy="#{proginter.programme.equipement.designation}" filterMatchMode="contains" > 
            <f:facet name="header"  >
                <span class="nomColonneTab">Equipement</span> 
            </f:facet>
            <h:outputText   value="#{proginter.programme.equipement.designation}" />  
        </p:column> 
        <p:column  sortBy="#{proginter.programme.designation}" filterBy="#{proginter.programme.designation}" filterMatchMode="contains" > 
            <f:facet name="header" >
                <span class="nomColonneTab"> Designation Programme</span>
            </f:facet>
            <h:outputText value="#{proginter.programme.designation}"   />  
        </p:column> 
        <p:column sortBy="#{proginter.programme.descriptif}" filterBy="#{proginter.programme.descriptif}" filterMatchMode="contains" > 
            <f:facet name="header"   >
                <span class="nomColonneTab" >Descriptif Programme</span>
            </f:facet>
            <h:outputText  value="#{proginter.programme.descriptif}"   />  
        </p:column> 
        <p:column sortBy="#{proginter.programme.operationSuivante}" filterBy="#{proginter.programme.operationSuivante}" filterMatchMode="contains" > 
            <f:facet name="header"   >
                <span class="nomColonneTab" >Date Opération</span>
            </f:facet>
            <h:outputText  value="#{proginter.programme.operationSuivante}"   />  
        </p:column> 
        <p:column  sortBy="#{proginter.type}" filterBy="#{proginter.type}" filterMatchMode="contains"  >
            <f:facet name="header">
                <span class="nomColonneTab">Type Intervention </span> 
            </f:facet>
            <p:cellEditor >                
                <f:facet name="output">               
                    <p:outputLabel value="#{proginter.type}"/>    
                </f:facet>
                <f:facet name="input">
                    <p:selectOneMenu  style="width:80px" value="#{proginter.type}"  editable="#{(proginter.type!=null)? programmeBean.dis():proginter.type}">
                        <f:selectItem itemLabel="Interne" itemValue="Interne"  />
                        <f:selectItem itemLabel="Externe" itemValue="Externe" />
                    </p:selectOneMenu>
                </f:facet>                                         
            </p:cellEditor> 
        </p:column> 
        <p:column  sortBy="#{proginter.interventioninterne.descriptif}" filterBy="#{proginter.interventioninterne.descriptif}" filterMatchMode="contains" >                
            <f:facet name="header" >
                <span class="nomColonneTab">Descriptif Intervention</span>
            </f:facet>
            <p:cellEditor>  
                <f:facet name="output">
                    <h:outputLabel  value="#{proginter.interventioninterne.descriptif}" />
                    <h:outputLabel value="#{proginter.interventionexterne.descriptif}"  />
                </f:facet> 
                <f:facet name="input">
                    <h:inputText value="#{(proginter.interventionexterne.descriptif==null)? proginter.interventioninterne.descriptif:proginter.interventionexterne.descriptif}" style="width:100%" 
                                 disabled="#{(proginter.interventionexterne.descriptif==null and proginter.interventioninterne.descriptif==null )?false:true}" />                                             
                </f:facet>                    
            </p:cellEditor> 
        </p:column>
        <p:column  sortBy="#{proginter.interventioninterne.personnel.nom}" filterBy="#{proginter.interventioninterne.personnel.nom}" filterMatchMode="contains" > 
            <f:facet name="header" >
                <span class="nomColonneTab">Personnel</span>
            </f:facet>
            <p:cellEditor>
                <f:facet name="output">
                    <h:outputText  id="rare" value="#{proginter.interventioninterne.personnel.nom} " /> 
                </f:facet>

                <f:facet name="input">
                    <h:inputText value="#{proginter.interventioninterne.personnel.nom}" disabled="#{(proginter.interventioninterne.personnel.nom !=null )? programmeBean.dis():proginter.interventioninterne.personnel.nom}"  />     
                </f:facet>
            </p:cellEditor>
        </p:column>
        <p:column  sortBy="#{proginter.interventionexterne.fournisseur.nom}" filterBy="#{proginter.interventionexterne.fournisseur.nom}" filterMatchMode="contains" > 
            <f:facet name="header" >
                <span class="nomColonneTab">Société</span>
            </f:facet>
            <p:cellEditor>
                <f:facet name="output">
                    <h:outputText value="#{proginter.interventionexterne.fournisseur.nom}" />
                </f:facet>
                <f:facet name="input">
                    <h:inputText value="#{proginter.interventionexterne.fournisseur.nom}"   disabled="#{(proginter.interventionexterne.fournisseur.nom!=null)? programmeBean.dis():proginter.interventionexterne.fournisseur.nom}"   />
                </f:facet>
            </p:cellEditor>
        </p:column>
        <p:column sortBy="#{proginter.retard}" filterBy="#{proginter.retard}" filterMatchMode="contains" > 
            <f:facet name="header"   >
                <span class="nomColonneTab" >Retard(/jr)</span>
            </f:facet>
            <h:outputText  value="#{proginter.retard}"   />  
        </p:column>

        <p:column>
            <f:facet name="header">
                <span class="nomColonneTab">Validation </span>
            </f:facet>                   

            <p:selectBooleanButton id="value1" value="#{interventionBean.value1}" onLabel="Oui" offLabel="Non" style="width:50px">
                <p:ajax update="value1" listener="#{interventionBean.modifier(proginter)}" />
            </p:selectBooleanButton>
        </p:column>

    </p:dataTable>
</h:form>

这是我的功能

public List<InterProgClass> getListeAll() {
this.click();
return listeAll;}
public void click() {

listeAll.clear();
//listeAll = new ArrayList<>();
for (Programme p : pfl.findByDate(date1)) {
InterProgClass inter = new InterProgClass();
        inter.setIntervention(new Intervention());
        inter.setProgramme(p);
        int r = (int) (date1.getTime() - p.getOperationSuivante().getTime()) / (1000 * 60 * 60 * 24);
        inter.setRetard(r);
        listeAll.add(inter);

    }

    for (InterventionInterne ii : pfl.findInterv(date1)) {
        InterProgClass inter = new InterProgClass();
        inter.setProgramme(ii.getProgramme());
        for (InterProgClass i : listeAll) {
            if (i.getProgramme().getIdIntervention() == inter.getProgramme().getIdIntervention()) {
                i.setInterventioninterne(ii);
                if(ii.getRetard()!=null)
                i.setRetard(ii.getRetard());
                i.setType("Interne");
            }
        }
    }

    for (InterventionExterne iex : pfl.findIntervEx(date1)) {

        InterProgClass inter = new InterProgClass();
        inter.setProgramme(iex.getProgramme());

        for (InterProgClass i : listeAll) {
            if (i.getProgramme().getIdIntervention() == inter.getProgramme().getIdIntervention()) {

                i.setInterventionexterne(iex);
                i.setType("Externe");

            }
        }

    }

}

public Intervention returnFromList(List<Intervention> l, Date d) {
    Intervention in = new Intervention();
    for (Intervention intervention : l) {
        if (intervention.getDateOperation().equals(d)) {
            in = intervention;
        }
    }
    return in;
}

这是我的Bean

@ManagedBean(name = "interProgClass")
@ApplicationScoped
public class InterProgClass implements Serializable{

//Attributes
private Programme programme;
private String designationProg;
private String descriptifProg;
private String descriptifIntervention;
private Date dateOp;
private Equipement equipement; 
private InterventionInterne interventioninterne;
private InterventionExterne interventionexterne; 
private Intervention intervention;
private Personnel personnel;
private String type;
private int retard;   
private List<Personnel> per;
private String test;
//Constructeurs 
public InterProgClass(){  }

public String getDescriptifIntervention() {
    return descriptifIntervention;
}

public void setDescriptifIntervention(String descriptifIntervention) {
    this.descriptifIntervention = descriptifIntervention;
}

//Getters & Setters

public String getTest() {
    return test;
}
public void setTest(String test) {
    this.test = test;
}
public Programme getProgramme() {
    return programme;
}
public void setProgramme(Programme programme) {
    this.programme = programme;
}
public String getDesignationProg() {
    return designationProg;
}

public void setDesignationProg(String designationProg) {
    this.designationProg = designationProg;
}

public String getDescriptifProg() {
    return descriptifProg;
}

public void setDescriptifProg(String descriptifProg) {
    this.descriptifProg = descriptifProg;
}

public Date getDateOp() { 
    return dateOp;
}

public void setDateOp(Date dateOp) {
    this.dateOp = dateOp;
}

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}


public Equipement getEquipement() {
    return equipement;
}

public void setEquipement(Equipement equipement) {
    this.equipement = equipement;
}


public InterventionInterne getInterventioninterne() {
    return interventioninterne;
}

public void setInterventioninterne(InterventionInterne interventioninterne) {
    this.interventioninterne = interventioninterne;
}

public InterventionExterne getInterventionexterne() {
    return interventionexterne;
}

public void setInterventionexterne(InterventionExterne interventionexterne) {
    this.interventionexterne = interventionexterne;
}

public Intervention getIntervention() {
    return intervention;
}

public void setIntervention(Intervention intervention) {
    this.intervention = intervention;
}

public Personnel getPersonnel() {
    return personnel;
}

public void setPersonnel(Personnel personnel) {
    this.personnel = personnel;
}

public int getRetard() { 
    return retard;
}

public void setRetard(int retard) {
    this.retard = retard;
}  

public List<Personnel> getPer() {
    return per;
}

public void setPer(List<Personnel> per) {
    this.per = per;
}
}

抱歉英语不好

1 个答案:

答案 0 :(得分:0)

您想在什么情况下提交? 我看到你最后有一个未贴上的标签,这是正常的吗?

如果要使用修改后的值更新managedBean,则需要某种方法告诉M​​anagedBean您要更新它。常规的InputText不会从前端到ManagedBean执行dataBinding。

执行此操作的一种方法是使用表单。

在提交时,表单内的InputFields的值将在后端更新。因此,在您的情况下,您需要将dataTable放在一个包含要提交的按钮的表单中,例如:

<h:form >  
    <p:commandButton value="OK" type="Submit"  actionListener="#{programmeBean.click}"       update=":content:cld:data1"  />

    <p:dataTable>        
    YOUR DATABLE....
    </p:dataTable>
</h:form>