1

当我尝试在我的数据表上插入许多行时出现显示数据的问题:插入的行在数据表上显示 2 次

举个例子 :

                     insert a second row
              row[1]  ===============>  row[2] 
                                        row[2] 

小面:

 <h:form>
    <p:commandButton id="dlgAjout" value="Ajout Agent" update=":displayCre" oncomplete="dialogCre.show();" icon="icon-add" title="Ajout  Agent" />
</h:form>
<h:form id="formdatable">
    <p:dataTable id="agentList" value="#{agentBean.agentministeres }" var="item" paginator="true" rows="10" paginatorTemplate="{CurrentPageReport}  {FirstPageLink}  {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" rowsPerPageTemplate="5,10,15">
        <p:column>
            <f:facet name="header">
                <h:outputText value="NomAgent" />
            </f:facet>
            <h:outputText value="#{item.nomAgent}" />
        </p:column>
        <p:column>
            <f:facet name="header">
                <h:outputText value="PrenomAgent" />
            </f:facet>
            <h:outputText value="#{item.prenomAgent}" />
        </p:column>
        <p:column>
            <f:facet name="header">
                <h:outputText value="Idagent" />
            </f:facet>
            <h:outputText value="#{item.idagent}" />
        </p:column>
        <f:facet name="footer">En Total il existe : #{ fn:length(agentBean.agentministeres)} agents.</f:facet>
    </p:dataTable>
</h:form>

<h:form id="displayCre">
    <p:dialog header="Ajout Agent" widgetVar="dialogCre" resizable="false" id="dlgAjout" showEffect="fade" hideEffect="explode" modal="true">
        <h:panelGrid id="display" columns="2" cellpadding="4" style="margin:0 auto;">
            <h:outputLabel value="NomAgent:" for="nomAgent" />
            <h:inputText id="nomAgent" value="# {agentBean.agentministere.nomAgent}" title="NomAgent" />
            <h:outputLabel value="PrenomAgent:" for="prenomAgent" />
            <h:inputText id="prenomAgent" value="#{agentBean.agentministere.prenomAgent}" title="PrenomAgent" />
            <h:outputLabel value="Idagent:" for="idagent" />
            <h:inputText id="idagent" value="#{agentBean.agentministere.idagent}" title="Idagent" required="true" requiredMessage="The Idagent field is required." />
            <f:facet name="footer">
                <p:commandButton id="confirm" title="Valider" value="Valider" action="#{agentBean.enregistrerAgent}" oncomplete="dialogCre.hide()" update=":formdatable, :messages" icon="icon-save" />
            </f:facet>
        </h:panelGrid>
    </p:dialog>
</h:form>

实体

 public class Agentministere implements Serializable {

    private static final long serialVersionUID = 1L;

    @Size(max = 30)
    @Column(name = "NOM_AGENT")
    private String nomAgent;

    @Size(max = 35)
    @Column(name = "PRENOM_AGENT")
    private String prenomAgent;

    @Id
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 30)
    @Column(name = "IDAGENT")
    private String idagent;

    @OneToMany(mappedBy = "idagent")
    private List<Intervention> interventionList;

    @JoinColumn(name = "ID_DEPT", referencedColumnName = "ID_DEPT")
    @ManyToOne
    private Departement idDept;

问题的原因可能是什么?

代理豆:

    @Named(value = "agentBean")
     @SessionScoped    
     public class AgentBean implements Serializable {

     @EJB
     private Manager manager;

    private List <Agentministere> agentministeres;
    private Agentministere agentministere=new Agentministere();

    public AgentBean() {
    }

    public void setAgentministeres(List<Agentministere> agentministeres) {
        this.agentministeres = agentministeres;
    }


   public List<Agentministere> getAgentministeres() {
        agentministeres=manager.getAllAgents();
        return agentministeres;
    }

   public String list() {
        System.out.println("###LIST###");
        return "AgentList?faces-redirect=true";
    }

     public Agentministere getAgentministere() {
        return agentministere;
    }

    public void setAgentministere(Agentministere agentministere) {
        this.agentministere = agentministere;
    }

    public String enregistrerAgent()  {

   manager.agentCreer(agentministere);
    FacesContext context = FacesContext.getCurrentInstance();
    context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Succès", "Agent Creé avec succès !"));
    return "AgentList";
    }
    }

会话 bean:

         //---------Agent----
public void agentCreer( Agentministere agentministere) {

agentministereFacade.create(agentministere);
   }
4

1 回答 1

1

两件事情:

1) 调用数据库服务以在 get 方法中返回一些值不是一个好主意:

public List<Agentministere> getAgentministeres() {
    agentministeres=manager.getAllAgents();
    return agentministeres;
}

JSF的生命周期会调用这个方法几次...

你可以试试这个: <f:metadata>、<f:viewParam> 和 <f:viewAction> 可以用来做什么?

在您的 bean 中创建一个 init 方法,该方法准备 bean 以显示初始数据。

2) mBean 中的操作“enregistrerAgent”不需要返回字符串。您可以将其设为无效,然后在数据库中插入新代理后,再次列出所有代理

agentministeres=manager.getAllAgents();

并更新客户端上的列表:

<p:commandButton update=":formId"/>
于 2013-08-14T17:41:24.023 回答