[JAVA] Was ich getan habe, als JSF keine Datenbankinformationen in der Ansicht anzeigen konnte

image.png

Informationen zu dem Problem, dass `` `javax.ejb.EJBException``` auftritt, wenn versucht wird, Datenbankinformationen in der Ansicht anzuzeigen. Ich habe versucht, meine Arbeit bis zur Lösung als Memorandum zusammenzufassen.


Was Sie verwenden

Was Sie tun möchten & Probleme

① Speichern Sie den eingegebenen Wert in der Datenbank ② Zeigen Sie die in der Datenbank gespeicherten Informationen auf der Seite an

image.png

Problem

Als ich ② mit dem folgenden Code ausführte, bekam ich einen Fehler `` `javax.ejb.EJBException```.

index.xhtml (Unter dem Body-Tag)


        <h2>Daten erstellen</h2>
        <h:form>
            <h:panelGrid columns="2">
Nummer:             
                <h:inputText value ="#{backigBean.number}" />
Name:
                <h:inputText value ="#{backigBean.name}" />
                <h:commandButton value="Erstellen" action="#{backigBean.create}" />
                <h:commandButton value="stornieren" type="reset" />
            </h:panelGrid>
            <br/>
            <br/>
            <h2>Liste der erstellten Informationen</h2>
            <h:dataTable value="#{backigBean.getAll}" var="item">
                <h:column>#{item.number}</h:column>
                <h:column>#{item.name}</h:column>
                <h:column><h:commandLink value="Bearbeiten" action="#{backigBean.toReturn}" /></h:column>
                <h:column><h:commandButton value="Löschen" action="#{backigBean.delete(item)}" /></h:column>
            </h:dataTable>
            <h:commandButton value="Rückkehr" action="#{backigBean.toReturn}" />
        </h:form>

BackingBean.java&nbsp;(Geschäftslogikcode)


package backingBeans;

import ejb.DataManager;
import entity.Data;
import java.io.Serializable;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@SessionScoped
@ManagedBean
public class BackingBean implements Serializable{
    private Integer number;
    private String name;
    @EJB
    private DataManager dm;
    
    //Datenspeicher
    public String create(){
        Data data = new Data();
        data.setNumber(number);
        data.setName(name);
        if(number == null) return null;
        try{
             dm.create(data);
        }catch(javax.ejb.EJBException e){}     
        clear();
        return null;
    }

    //Holen Sie sich alle Daten aus der DB
    public List<Data> getAll(){
        return dm.getAll();
    }

    //Daten löschen
    public String delete(Data data){
        dm.delete(data);
        return null;
    }

    //Browser löschen
     public void clear(){
        number = null;
        name = null;
    }
    
    //Kehren Sie zur gleichen Seite zurück
    public String toReturn(){
        return null;
    }
    
    //Getter & Setter
    public Integer getNumber() {
        return number;
    }
    public void setNumber(Integer number) {
        this.number = number;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

Data.java&nbsp;(Datenklasse)


package entity;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Data implements Serializable{
    @Id
    private Integer number;
    private String name;
    public Data(){}
    public Data(Integer number, String name){
        this.number = number;
        this.name = name;
    }

    //Getter & Setter
    public Integer getNumber() {
        return number;
    }
    public void setNumber(Integer number) {
        this.number = number;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

DataManager.java&nbsp;(Code, der zwischen DB und Daten vermittelt)


package ejb;

import entity.Data;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;


@Stateless
public class DataManager {
    @PersistenceContext
    private EntityManager em;
    
    //Eingabewert in DB speichern
    public void create(Data data){
        em.persist(data);
    }
    //Daten in der Datenbank löschen
    public void delete(Data data){
        em.remove(em.merge(data));
    }
    //Holen Sie sich alle Daten in der DB
    public List<Data> getAll(){
        return em.createNamedQuery("backingBean.getAll").getResultList();
    }
    
}

3 Dinge, die ich zu lösen versucht habe

1. Leeren Sie den Cache

Terminal


$ ~/Library/Caches
$ rm -rf NetBeans 

Starten Sie dann NetBeans neu. ... aber nichts hat sich geändert. (Referenzseite: http://d.hatena.ne.jp/tkrd/20140818/1408315483)

2. Grenzen Sie das Ressourcen-Tag in `` `glassfish-resources.xhtml``` auf eins ein

glassfish-resources.xhtml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resources PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Resource Definitions//EN" "http://glassfish.org/dtds/glassfish-resources_1_5.dtd">
<resources>
    <jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="org.apache.derby.jdbc.ClientDataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="derby_net_test_appPool" non-transactional-connections="false" pool-resize-quantity="2" res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
        <property name="serverName" value="localhost"/>
        <property name="portNumber" value="1527"/>
        <property name="databaseName" value="test"/>
        <property name="User" value="testuser"/>
        <property name="Password" value="test"/>
        <property name="URL" value="jdbc:derby://localhost:1527/test"/>
        <property name="driverClass" value="org.apache.derby.jdbc.ClientDriver"/>
    </jdbc-connection-pool>
    <jdbc-resource enabled="true" jndi-name="java:app/jdbc/test" object-type="user" pool-name="derby_net_test_appPool"/>
</resources>

In diesem Ressourcen-Tag heißt es möglicherweise: "In diesem Projekt stellt der Server eine Verbindung zu dieser Datenbank her." Wenn ich eine Verbindung zu mehreren Datenbanken herstelle, werden automatisch viele Datenbankinformationen generiert, sodass der Server meiner Meinung nach nicht weiß, mit welcher Datenbank eine Verbindung hergestellt werden soll ... Bearbeiten Sie daher das Ressourcen-Tag so, dass es in dieser Datei nur einmal angezeigt wird.

Dies löst das Serverproblem!

3. Ändern Sie die zu verwendende Funktion

Diesmal habe ich einen weiteren Fehler bekommen. image.png Es scheint, dass getAll nicht gut ist, also ändern Sie den relevanten Teil der Ansichtsdatei in alle.

index.xhtml


...(Kürzung)
<h2>Liste der erstellten Informationen</h2>
<h:dataTable value="#{backigBean.all}" var="item">

Dann wird `javax.ejb.EJBException `erneut angezeigt. Ändern Sie daher den Code von DataManager in die folgende Funktion.

DataManager


 //...(Kürzung)
 //Holen Sie sich alle Daten in der DB
    public List<Data> getAll(){
         //return em.createNamedQuery("backingBean.getAll").getResultList();Wechseln Sie hier zu
         return em.createQuery("SELECT c FROM Data c").getResultList();
    }

gerührt! !!

Zusammenfassung

Recommended Posts

Was ich getan habe, als JSF keine Datenbankinformationen in der Ansicht anzeigen konnte
[Schienen] Anzeigen von Informationen, die in der Datenbank gespeichert sind
Ich möchte bei der Registrierung in der Datenbank eine Fehlermeldung anzeigen
[Java] Ganzzahlige Informationen von Zeichen in der Textdatei, die mit der Methode read () erfasst wurden
Was ich getan habe, als JSF keine Datenbankinformationen in der Ansicht anzeigen konnte
In MessageResources.properties beschriebene japanische Zeichen sind verstümmelt
[java] Was ich getan habe, als ich Listen in meiner eigenen Klasse verglichen habe
Über das, was ich beim Erstellen einer CLJ-Datei mit Clojure getan habe
Was ich bei der Migration von der Spring Boot 1.4-Serie zur 2.0-Serie getan habe
Was ich bei der Migration von der Spring Boot 1.5-Serie zur 2.0-Serie getan habe
Worauf habe ich mich vorbereitet, als ich während der Entwicklung des Web mit Java in ein Android-Anwendungsentwicklungsprojekt eingetreten bin?
Was tun, wenn der Wert im zweiten getSubmittedValue () in JSF Validator null wird?
Was ich getan habe, als ich Java zu Kotlin konvertiert habe
[Zusammenfassung] Was ich bemerkt und getan habe, als mir gesagt wurde, dass das Oracle JDK bezahlt wurde
Was ich beim Erstellen eines Servers in Java gelernt habe
[Schienen] So zeigen Sie Bilder in der Ansicht an
Worauf ich beim ActiveModel :: Serializer-Test gestoßen bin
Wovon ich bei der Einführung der JNI-Bibliothek süchtig war
IntelliJ gradle 2.2 → 2.6 Was ich getan habe, als ich über die Umgebungsmigration gestolpert bin
[Rails] Was tun, wenn der Fehler Keine Datenbank ausgewählt und Unbekannte Datenbank in db: migrate angezeigt wird?
Was Anfänger in der Android-Entwicklung vor der Veröffentlichung der App in 2 Wochen getan haben
Was ist, wenn ich eine finally-Klausel in die Try-with-Resources-Syntax schreibe?
Was tun, wenn die Änderungen im Servlet nicht berücksichtigt werden?
[Rails] So zeigen Sie übergeordnete Informationen in der untergeordneten Ansicht in verschachtelten Beziehungen an
Was ich überprüft habe, als ich Docker Hub in einer Windows 10-Heimumgebung installiert habe, aber nicht gestartet wurde