viele Objekte des Managed Bean

mario87b

Aktives Mitglied
Hallo.

Ich habe mal eine Frage.

Folgendes hab ich beobachtet.

Ich habe eine kleine JSF Anwendung. Eine einfache Abfrage aus einer Oracle Datenbank. Gleich vorneweg, funktioniert alles, ABER.

Die Eingaben werden via HTML Form eingetragen, die managed Bean entsprechend verknüpft. Hier eine Auszug des relevanten Codes:

Java:
...
<h:form id="Eingabe">
                    
                    <h:messages style="color:red;" />
                    
                    <h:panelGrid columns="2">
                        <p>Name: </p>
                        <h:inputText value="#{data_tel_neu.name}" />
                        
                        <p>Vorname: </p>
                        <h:inputText value="#{data_tel_neu.vorname}" />
                        
                        <p>Org.-Einheit: </p>
                        <h:inputText value="#{data_tel_neu.org}" />
                        
                        <p>Telefon: </p>
                        <h:inputText value="#{data_tel_neu.tel}" id="Telefon" >
                            <f:validateLongRange />
                        </h:inputText>
                        
                        <h:commandButton type="reset" value="Zurücksetzen" />
                        <h:commandButton action="/result.xhtml?faces-redirect=true" value="Suchen" />       
                    </h:panelGrid>
                </h:form>
...

Im Kontruktur der Bean ist ein logger enthalten, der soll mir eigentlich nur loggen: "läuft soweit".
Nun hab ich aber bemerkt das wenigsten 6 Einträge des Logeintrag in der Logdatei auflaufen.
Der Kontruktor wird also wenigsten 6 mal aufgerufen, die Anwendung erzeugt also entsprechend viele Objekte der Bean? Wieso denn das? Kann mir das jemand erklären?

Nutze NetBeans 7.xx, JSF 2.x, Apache Tomcat 7.0.x Webserver, Session Scope ist Applikation.

Danke.
 

jwiesmann

Bekanntes Mitglied
Deine Bean hat bestimmt "nur" einen
Code:
@RequestScope
.
Wenn du diesen zu
Code:
@ViewScope
änderst, wird solange du auf deinem View bleibst kein neues Object erzeugt.
Nur genau einmal wird es erzeugt, wenn du @SessionScope nutzt.
SessionScope sollte man, soweit möglich, vermeiden. (Bsp. komisches / verwirrendes Verhalten bei mehreren Tabs, speicher wird nicht aufgeräumt, solange die Session aktiv ist etc.)

gruß

ahh .. edit sagt:
Session Scope ist Applikation
Was genau ist damit gemeint?
Ist der Scope nun Session oder Application?
 

sence

Bekanntes Mitglied
Getter and Setter werden auch mehrfach aufgerufen, aufgrund des Lifecyle der Apllikation
restoreView, apply Requests, Process Validation,Update Model Values,Invoke Application,Render Response,Process Events

:)
 

mario87b

Aktives Mitglied
Deine Bean hat bestimmt "nur" einen
Code:
@RequestScope
.
Wenn du diesen zu
Code:
@ViewScope
änderst, wird solange du auf deinem View bleibst kein neues Object erzeugt.
Nur genau einmal wird es erzeugt, wenn du @SessionScope nutzt.
SessionScope sollte man, soweit möglich, vermeiden. (Bsp. komisches / verwirrendes Verhalten bei mehreren Tabs, speicher wird nicht aufgeräumt, solange die Session aktiv ist etc.)

gruß

ahh .. edit sagt:

Was genau ist damit gemeint?
Ist der Scope nun Session oder Application?

Ich meinte damit SessionScope. Die Applikation läuft unter SessionScope. In der faces-config.xml steht dazu

Java:
...
<managed-bean-scope>session</managed-bean-scope>
...

SessionScope deshalb weil ich eine Einlog-Komponente drin habe. Einige Nutzer müssen sich anmelden, damit mehr Funktionen zur Verfügung stehen. Dabei hatte ich Probleme, wenn RequestScope genutzt wird.
 

Ähnliche Java Themen

Neue Themen


Oben