根据selectOneMenu中选择的值更新dataTable

时间:2014-05-25 16:39:44

标签: spring hibernate jsf java-ee primefaces

我正在使用selectOneMenu,我想根据我在组合框中选择的内容更新数据表,我在数据库上有两个表: 的 Fournisseur idFournisseur raisonSociale 电话.. 和 的德维斯 idDevis idFournisseur

devis.xhtml

<h:form id="form">

    <p:growl id="msgs" showDetail="true"/>
 <p:outputLabel for="console" value="Basic:" />
 <p:selectOneMenu id="console" value="#{fournisseurBean.raisonSociale}">
     <f:selectItems value="#{fournisseurBean.listeFournisseurs}" var="fournisseur" itemValue="#{fournisseur}" itemLabel="#{fournisseur.raisonSociale}" />
     <p:ajax event="change" update="display" listener="#{fournisseurBean.getFournisseurByRaison()}" />    
 </p:selectOneMenu>
    <p:dataTable id="display" var="listeDevis" value="#{devisBean.listeDevis}" editable="true" style="margin-bottom:10px">
       <f:facet name="header">
           Liste des devis
       </f:facet>

       <p:ajax event="rowEdit" listener="#{dtEditView.onRowEdit}" update=":form:msgs" />
       <p:ajax event="rowEditCancel" listener="#{dtEditView.onRowCancel}" update=":form:msgs" />

       <p:column headerText="Id devis">
           <p:cellEditor>
               <f:facet name="output"><h:outputText value="#{listeDevis.idDevis}" /></f:facet>
               <f:facet name="input"><p:inputText id="modelInput" value="#{listeDevis.idDevis}" style="width:100%"/></f:facet>
           </p:cellEditor>
       </p:column>

       <p:column headerText="Date devis">
           <p:cellEditor>
               <f:facet name="output"><h:outputText value="#{listeDevis.dateDevis}" /></f:facet>
               <f:facet name="input"><p:inputText value="#{listeDevis.dateDevis}" style="width:100%" label="Year"/></f:facet>
           </p:cellEditor>
       </p:column>

       <p:column style="width:32px" headerText="Modification">
           <p:rowEditor />
       </p:column>
   </p:dataTable>



</h:form>

FournisseurBean.xhtml

package controller;

import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.event.ValueChangeEvent;
import model.services.FournisseurMetier;
import net.vo.Fournisseur;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component
@Scope("view")
public class FournisseurBean {

    @Autowired
    private FournisseurMetier fournisseurMetier;

    private List<Fournisseur> listeFournisseurs;
    private List<String> listeRaisons;
    private int idFournisseur;
    private String raisonSociale;
    private String rib;
    private String adresse;
    private Long telephone;

     @PostConstruct
    public void init() {
        listeFournisseurs = fournisseurMetier.getAllFournisseurs();
        listeRaisons = fournisseurMetier.getAllRaisonsSociales();
    }

     public List<Fournisseur> getListeFournisseurs() {
        return listeFournisseurs;
    }
    public void insert()
    {
        Fournisseur fournisseur = new Fournisseur();
        fournisseur.setIdFournisseur(getIdFournisseur());
        fournisseur.setRaisonSociale(getRaisonSociale());
        fournisseur.setRib(getRib());
        fournisseur.setAdresse(getAdresse());
        fournisseur.setTelephone(getTelephone());
    fournisseurMetier.insert(fournisseur);
    }
    public void update()
    {
        Fournisseur fournisseuur = fournisseurMetier.getFournisseur(this.idFournisseur);
        fournisseuur.setRaisonSociale(getRaisonSociale());
        fournisseuur.setRib(getRib());
        fournisseuur.setAdresse(getAdresse());
        fournisseuur.setTelephone(getTelephone());
    fournisseurMetier.update(fournisseuur);
    }

    public FournisseurMetier getFournisseurMetier() {
        return fournisseurMetier;
    }

    public void setFournisseurMetier(FournisseurMetier fournisseurMetier) {
        this.fournisseurMetier = fournisseurMetier;
    }

    public void setListeFournisseurs(List<Fournisseur> listeFournisseurs) {
        this.listeFournisseurs = listeFournisseurs;
    }

    public int getIdFournisseur() {
        return idFournisseur;
    }

    public void setIdFournisseur(int idFournisseur) {
        this.idFournisseur = idFournisseur;
    }

    public String getRaisonSociale() {
        return raisonSociale;
    }

    public void setRaisonSociale(String raisonSociale) {
        this.raisonSociale = raisonSociale;
    }

    public String getRib() {
        return rib;
    }

    public void setRib(String rib) {
        this.rib = rib;
    }

    public Long getTelephone() {
        return telephone;
    }

    public void setTelephone(Long telephone) {
        this.telephone = telephone;
    }

    public String getAdresse() {
        return adresse;
    }

    public void setAdresse(String adresse) {
        this.adresse = adresse;
    }

    @Override
    public String toString() {
        return "FournisseurBean{" + "raisonSociale=" + raisonSociale + '}';
    }

    public void getFournisseurByRaison()
    {
        System.out.println(raisonSociale);
    }

}

此方法getFournisseurByRaison()向我显示对象Fournisseur的引用,而不是属性raisonSociale。

2 个答案:

答案 0 :(得分:0)

您可以像评论中提到的那样起诉p:ajax OR
由于您使用的是Primefaces,因此您还可以使用org.primefaces.context.RequestContext对象从ManagedBean本身更新任何组件。

例如:

的facelet:

<h:form id="form1">
    <p:dataTable id="myTab">
       ...
    </p:dataTable>
</h:form>

ManagedBean:

RequestContext reqCtx = Requestcontext.getCurrentInstance();
req.Ctx.update("form1:myTab");

答案 1 :(得分:0)

  

这个方法getFournisseurByRaison()向我展示了对象Fournisseur的引用而不是attribure raisonSociale

这是因为您将对象设置为值:

 <!-- itemValue="#{fournisseur}" <= here is the object set as value -->
<f:selectItems value="#{fournisseurBean.listeFournisseurs}"
    var="fournisseur"
    itemValue="#{fournisseur}"
    itemLabel="#{fournisseur.raisonSociale}" />

您应该使用标识符或其他字段来从列表的值中搜索所选的fournisseur。这可能是一个开始的方法:

<!-- itemValue="#{fournisseur.id}" <= or another unique identifier field -->
<f:selectItems value="#{fournisseurBean.listeFournisseurs}"
    var="fournisseur"
    itemValue="#{fournisseur.id}"
    itemLabel="#{fournisseur.raisonSociale}" />

然后,在你的bean中:

public void getFournisseurByRaison() {
    System.out.println(raisonSociale); //will print the user selected id or unique identifier
    //access to devisBean and update the data in `devisBean.listeDevis` in there
}
相关问题