2016-07-19 14 views
0

Ich habe Eingabefelder und Datentabelle auf derselben Seite. Wenn Benutzer neue Daten hinzufügen, sollten Daten zur Datentabelle hinzugefügt werden, ohne die Seite zu aktualisieren.JSF-Datentabelle aktualisieren, wenn Daten ohne Refresh-Seite hinzugefügt werden

Um dies zu erreichen, habe ich versucht, den folgenden Code

hospials.xhtml:

<h:form> 
     <h:outputLabel>Name:</h:outputLabel> 
     <h:inputText value="#{hospitalsBean.ename}"/> 
     <h:outputLabel>Address:</h:outputLabel> 
     <h:inputText value="#{hospitalsBean.hospital.address}"></h:inputText> 
     <h:commandButton value="A"> 
      <f:ajax event="click" render="table" listener="#{hospitalsBean.command()}"></f:ajax> 
     </h:commandButton> 
    </h:form> 
    <h:dataTable id="table" value="#{hospitalsBean.hospitals}" var="hospital"> 
     <h:column> 
      <f:facet name="header">Name</f:facet> 
      #{hospital.name.english} 
     </h:column> 

     <h:column> 
      <f:facet name="header">Address</f:facet> 
       #{hospital.address} 
     </h:column> 
    </h:dataTable> 

HospitalsBean.java:

private Hospital hospital = new Hospital(); 
private ArrayList<Hospital> hospitals = new ArrayList<>(); 
private Part file; // +getter+setter 

public ArrayList<Hospital> getHospitals() { 
    return MongoCrud.getHospitals(); 
} 

public void setHospitals(ArrayList<Hospital> hospitals) { 
    this.hospitals = hospitals; 
} 

public Hospital getHospital() { 
    return hospital; 
} 

public void setHospital(Hospital hospital) { 
    this.hospital = hospital; 
} 

public void command() throws IOException { 

    MongoService.insertData("Hospital", Finals.gson.toJson(hospital)); 
} 

aber wenn ich Daten einfügen, um MongoDB die Krankenhausvariable hat keinen Namen und Adresse

+0

in Ihrem Command oder in der Ajax-Ereignis sollte es eine Eigenschaft Update sein, wo Sie auf die Datentabelle wie update = „table“ –

+0

@Azazel beziehen kann: das Update-Attribut ist für PrimeFaces Komponenten. Dies ist einfach jsf, wo es das Attribut 'render' sein sollte. Siehe http://stackoverflow.com/questions/25339056/understanding-process-and-update-attributes-of-primefaces. Und tatsächlich ist dies bereits auf dem Ajax-Tag in der Schaltfläche vorhanden. – Kukeltje

+0

versuchen Sie mit 'execute = "ename_id address_id" 'mit dem Ajax-Tag, um die EditableValueHolders auszuführen. Dazu müssen Sie Ihren Eingaben ID-Attribute hinzufügen ... und mit dem Ausführen werden Sie diese Komponenten im Server ausführen ODER fügen Sie 'execute =" @ form "' hinzu, um alle Komponenten innerhalb des '

Antwort

0

Ihnen fehlt das Attribut execute="", damit Sie die Komponenten über AJAX auf der Serverseite ausführen können.

Der Standardwert für das Attribut ist @this die nur wiederum die Komponente auszuführen, in dem das Etikett eingebettet ist.

so statt

<f:ajax event="click" 
     render="table" 
     listener="#{hospitalsBean.command()}" /> 

versuchen

<f:ajax event="click" 
     render="table" 
     execute="@form" 
     listener="#{hospitalsBean.command()}" /> 

oder geben Sie Ihre Editierbare WerthalterID s:

<h:inputText value="#{hospitalsBean.ename}" 
        id="ename"/> 
    <h:inputText value="#{hospitalsBean.hospital.address}" 
        id="address"/> 
    <h:commandButton value="A"> 
      <f:ajax event="click" 
        render="table" 
        execute="address ename" 
        listener="#{hospitalsBean.command()}" /> 
    </h:commandButton> 
+0

danke es funktionierte – Hamiteza

+1

dann akzeptiere es als Antwort –