2017-01-27 3 views
0

In meinem Java-Web-Projekt möchte ich testen, wie eine Liste in einer DataTable angezeigt wird, ich habe ein Beispiel, in dem das angezeigt wird. Ich versuche, dem Beispiel zu folgen, also habe ich eine neue xhtml-Seite erstellt, in der ich die dataTable der Probe kopiert habe, eine neue dataTable hinzugefügt habe und eine neue Bean namens StatPanne erstellt habe. Die Bean des Beispiels ist NaturePanneController. Das Problem ist, dass die neue dataTable leer ist. Ich verstehe, dass die Liste, die von der neuen Bean zurückgegeben wird, leer ist, aber ich weiß nicht warum, bitte, wem hilfst du mir? Danke.Wie Daten aus der Datenbank in DataTable angezeigt werden?

@Name("naturePanneController") 
@Scope(ScopeType.CONVERSATION) 
public class NaturePanneController { 
@In 
EntityManager entityManager; 
@In 
@Out 
NaturePanne naturePanne; 

private Boolean edit = false; 
private Integer paramid; 

public Boolean getEdit() { 
    return edit; 
} 

public Integer getParamid() { 
    return paramid; 
} 

public void setParamid(Integer paramid) { 
    this.paramid = paramid; 
} 

public void setEdit(Boolean edit) { 
    this.edit = edit; 
} 

public List<NaturePanne> getNaturePanne() { 
return entityManager.createQuery("select a from NaturePanne a") 
      .getResultList(); 
} 


public void selectNP(NaturePanne np) { 
    naturePanne = np; 

} 

public void supprimer() { 
    if (naturePanne != null) { 
     //if (nn != null) { 
     Integer a = getParamid(); 
     NaturePanne np = entityManager.find(NaturePanne.class, a); 
     entityManager.remove(np); 
    } 
} 

public void ajouter(ActionEvent e) { 
    entityManager.persist(naturePanne); 
    naturePanne = new NaturePanne(); 
} 


public void mettreajour() { 

    if (getEdit() == true) { 
     setEdit(false); 
    } else { 
     setEdit(true); 
    }}} 

Mein neues Bohne StatPanne.java

@Name("statPanne") 
@Scope(ScopeType.CONVERSATION) 
public class StatPanne { 
@In 
EntityManager entityManager; 

@In 
@Out 
NaturePanne naturePanne; 


private Boolean edit = false; 
private Integer paramid; 



public Boolean getEdit() { 
    return edit; 
} 

public Integer getParamid() { 
    return paramid; 
} 

public void setParamid(Integer paramid) { 
    this.paramid = paramid; 
} 

public void setEdit(Boolean edit) { 
    this.edit = edit; 
} 

public List<NaturePanne> getNaturePanne() { 
    return entityManager.createQuery("select a from NaturePanne a").getResultList(); 


} 


public void selectNP(NaturePanne np) { 
    naturePanne = np; 
} 

public void supprimer() { 
if (naturePanne != null) { 
    //if (nn != null) { 
    Integer a = getParamid(); 
    NaturePanne np = entityManager.find(NaturePanne.class, a); 
    entityManager.remove(np); 
} 
} 

public void ajouter(ActionEvent e) { 
entityManager.persist(naturePanne); 
naturePanne = new NaturePanne(); 
} 


public void mettreajour() { 

if (getEdit() == true) { 
    setEdit(false); 
} else { 
    setEdit(true);}}} 

Meine Seite xhtml, die die beiden Datentabellen enthält

<!-- the new dataTable: empty table --> 
<h:form> 
<rich:dataTable value="#{statPanne.naturePanne}" var="lp"> 
<h:column headerClass="headerleftfacet"> 
<f:facet name="header"> 
<h:outputText value="#{msg.nom_panne}" /> 
</f:facet> 
<h:outputText id="outtt" value="#{lp.lib_naturepanne}"/>  
</h:column> 
</rich:dataTable> 
</h:form>  


<!-- the old dataTable:works well --> 
<h:form> 
<rich:dataTable var="panne" value="#{naturePanneController.naturePanne}"> 
<h:column headerClass="headerleftfacet"> 
<f:facet name="header"> 
<h:outputText value="#{msg.nom_panne}" /> 
</f:facet> 
<h:outputText value="#{panne.lib_naturepanne}"/> 
</h:column> 
</rich:dataTable> 
</h:form> 

Das Unternehmen NaturePanne.java

@Entity 
@Name("naturePanne") 
@Scope(ScopeType.EVENT) 
@AutoCreate 
@Table(name = "naturepanne") 
public class NaturePanne implements Serializable { 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private Integer id_naturepanne; 
private String lib_naturepanne; 

//Getters/Setters 
+0

Wenn die von der Datenbank zurückgegebene Liste leer ist, ist es ein reines Datenbank/jpa-Problem, nicht java-se jsf oder datatable – Kukeltje

+0

Danke für die Antwort, haben Sie einen Vorschlag – marwa

+0

@Kukeltje Ihrer Meinung nach, warum meine neue Datentabelle ist leer, obwohl ich die gleiche Bohne kopiert habe? – marwa

Antwort

0

Überprüfen Sie die EntityManager Aufbau . Aktivieren Sie in den EMF-Einstellungen show sql config wie unten.

Je nachdem, welche Anwendung Sie verwenden .. für Hibernate:
<property name = "hibernate.show_sql" value = "true" /> für JPA: <property name="${filename}" value="DefaultLevel=WARN, Runtime=INFO, Tool=INFO, SQL=TRACE"/>

Auf diese Weise können Sie SQL versucht es sehen auszuführen, können Sie diese SQL in Isolation testen, um zu sehen, wenn Sie tatsächlich Ergebnisse aus dem Datenspeicher haben.

+0

Dies ist eher ein Kommentar als eine Antwort. – Kukeltje

+0

Meiner Meinung nach, warum meine neue DataTable leer ist, obwohl ich die gleiche Bohne kopiert habe? – marwa

Verwandte Themen