Spring 根据SelectOne菜单中选择的值更新数据表
我使用的是SelectOne菜单,我想根据我在组合框中选择的内容更新datatable,数据库中有两个表: 福尼瑟 伊弗尼瑟尔 葡萄干社会 电话 和 设计 艾德维特 伊弗尼瑟尔 design.xhtmlSpring 根据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
<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
}