Spring 根据SelectOne菜单中选择的值更新数据表

Spring 根据SelectOne菜单中选择的值更新数据表,spring,hibernate,jsf,jakarta-ee,primefaces,Spring,Hibernate,Jsf,Jakarta Ee,Primefaces,我使用的是SelectOne菜单,我想根据我在组合框中选择的内容更新datatable,数据库中有两个表: 福尼瑟 伊弗尼瑟尔 葡萄干社会 电话 和 设计 艾德维特 伊弗尼瑟尔 design.xhtml <h:form id="form"> <p:growl id="msgs" showDetail="true"/> <p:outputLabel for="console" value="Basic:" /> <p:selectOneMen

我使用的是SelectOne菜单,我想根据我在组合框中选择的内容更新datatable,数据库中有两个表: 福尼瑟 伊弗尼瑟尔 葡萄干社会 电话 和 设计 艾德维特 伊弗尼瑟尔

design.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>
fourniseurbean.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。

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

例如:

Facelet:

<h:form id="form1">
    <p:dataTable id="myTab">
       ...
    </p:dataTable>
</h:form>
这个方法getFournisseurByRaisson向我显示了对对象Fournisseur的引用,而不是属性raisonSociale

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

您应该使用标识符或其他字段,以便能够从列表的值中查找所选的Fourniseur。这可能是一个开始的方法:

然后,在你的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
}

那么您想根据从Selectone菜单中选择的值更新p:datatable组件吗?是的,现在我找到了一种使用submit按钮的方法,但我想使用ajax来实现@Kishor Pin我将在托管bean中放置哪些方法。因为我是用ajax写的。你给我的这段代码是我在submit中写的,但是我将在selectOneMenu@Kishor PYou上调用这个方法,你可以在Listener中使用它自己,哪个Listener是ajax中的,哪个是ajax中的,所以我需要同时编写它们ajax和托管bean@Kishor PThis中的代码这不是OP遇到的主要问题。谢谢你的回复,经过更多的搜索,我找到了一个解决方案,但无论如何,谢谢你,这个问题的解决方案是什么
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
}