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;

問題の原因は何ですか?

AgentBean :

    @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

2つのこと:

1) get メソッドで何らかの値を返すためにデータベース サービスを呼び出すのは良い考えではありません。

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

JSF のライフサイクルは、このメソッドを数回呼び出します...

これを試すことができます: <f:metadata>、<f:viewParam>、および <f:viewAction> は何に使用できますか?

Bean で初期データを表示するように Bean を準備する init メソッドを作成します。

2) mBean のアクション「enregistrerAgent」は文字列を返す必要はありません。無効にすることができ、データベースに新しいエージェントを挿入した後、すべてのエージェントを再度リストするだけです

agentministeres=manager.getAllAgents();

クライアントのリストを更新します。

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