JSF Daten aus ManagedBean können vom Controller gelesen werden

Headhunter_X

Mitglied
Hallo,

ich habe eine Seite login.jsp. Den Username und das Passwort schreibe ich in eine ManagedBean. Die MB ist als <Session> deklariert.

Darauf folgen noch zwei weiter Seiten, auf denen man Daten in ein Formular eintragen kann.
Auf der letzten Seite möchte ich dann alle Informationen der vorherigen Seiten in eine Datenbank schreiben. Die Daten der letzen Seite sind dann auch verfügbar und können ohne Probleme in die Datenbank geschrieben werden. Jedoch ist die Property USername der Seite login.jsp in der DB leer. Wenn ich die Property aber auf der JSP-Seite ausgeben lasse, ist sie noch da. Das heißt, irgendwie muss der Fehler zwischen Login und Controller liegen.


ManagedBean
Java:
public class Login
{
    private String username="";
    private String userpass="";

    Controller controller ;

    public LoginController()
    {}

    public void setUsername(String username)
    {
        this.username = username;
        System.out.println("Login: " +this.username);
        this.controller = new Controller();
        this.controller.setqNumber(this.username);
    }

    public String getUsername()
    {
        return this.username;
    }

    public void setUserpass(String userpass)
    {
        this.userpass = userpass;
    }

    public String getUserpass()
    {
        return this.username;
    }



Controller:

Java:
public class Controller
{
    private ArrayList<SelectItem> allApplications = new ArrayList<SelectItem>();
    private ArrayList<SelectItem> testRoles;
    private int selectedOptionsId=0;
    private int selectedRoleId=0;
    private String justificationText ="";
    private String username="";
        
    private Login login = new Login();
    private GiveRolesModel roleModel = new GiveRolesModel();
    private OrderModel orderModel = new OrderModel();
    
    public Controller()
    {
        allApplications.add(new SelectItem(0,"Wählen Sie"));
        allApplications.add(new SelectItem(1,"Test1"));
        allApplications.add(new SelectItem(2,"Test2"));
    }

    public void setSelectedRoleId(int selectedRoleId)
    {
        this.selectedRoleId = selectedRoleId;
    }

    public int getSelectedRoleId()
    {
        return this.selectedRoleId;
    }

    public void setSelectedOptionsId(int selectedOptionsId)
    {
        this.selectedOptionsId = selectedOptionsId;
    }

    public int getSelectedOptionsId()
    {
        return this.selectedOptionsId;
    }

    public ArrayList<SelectItem> getApplications()
    {
        return this.allApplications;
    }

    public ArrayList<SelectItem> getTestRoles()
    {
        this.roleModel.setSID(getSelectedOptionsId());
        this.testRoles = this.roleModel.getTestRoles();

        return this.testRoles;
    }

    public void setJustificationText(String justificationText)
    {
        this.justificationText = justificationText;
    }

    public String getJustificationText()
    {
        return this.justificationText;
    }

    public String delegateOrder()
    {
        this.username = this.login.getUsername();
        this.orderModel.setOrder(this.justificationText, this.username);

        return "login";
    }
}

Letzte JSP-Seite:
HTML:
 <h:form id="form1">
    <p>
    <h:selectOneListbox required="true" requiredMessage="Bitte eine Rolle auswählen." id="listOfroles" value="#{Controller.selectedRoleId}" >
        <f:selectItems id="role" value="#{Controller.testRoles}"></f:selectItems>
    </h:selectOneListbox>
                </p>
                  <br>
                <p>Bitte geben Sie eine kurze Begründung für Ihre Antragsstellung ein:</p>
                <p>
             <h:inputTextarea id="begr_as" value="#{Controller.justificationText}" styleClass="" cols="50" rows="5" required="true" requiredMessage="Bitte Begründung eingeben." ></h:inputTextarea>
                                        </p>
                                        <p style="font-size:10px;">Max. 150 Zeichen.</p>
                                        <br>
                                        <p><h:commandButton styleClass="button"  value="Antrag absenden" id="save" action="#{Controller.delegateOrder}"  /></p>
                                    </h:form>

Java:
public void setOrder(String justificationText, String username)
    {
        this.justificationText = justificationText;
        this.username = username;

        dbQuery = new DatabaseQuery();
        this.dbQuery.setUpdate("INSERT INTO ANTRAEGE VALUES(1,"+"'"+this.username+"'"+",'Test','Test','Test','in Bearbeitung','Test','Test','Test',"+"'"+this.justificationText+"'"+",'K.A.')");
        this.result = this.dbQuery.getQuery();
    }
 

Fant

Bekanntes Mitglied
Zeig mal deine Login-Seite. Ich vermute, dass du dort Benutzernamen und Passwort in ein anderes Objekt speicherst, als das, aus dem du später den Benutzernamen ausliest.

Gruß Fant
 

Headhunter_X

Mitglied
Hallo Fant,
hier meine Login-Seite:

HTML:
 <h:form id="form">
      <p>
         <h:panelGrid columns="2">
                  <h:outputLabel for="username" value="Username:"></h:outputLabel>
               <h:inputText id="username" required="true" value="#{LoginController.username}" ></h:inputText>
              <h:outputLabel for="userpass" value="Passwort:"></h:outputLabel>
                <h:inputSecret id="userpass" required="true" value="#{LoginController.userpass}" ></h:inputSecret>
                  </h:panelGrid>
           <h:commandButton value="Login" action="#{LoginController.login}" ></h:commandButton>
      </p>
</h:form>

Bemerkung zur vorher geposteten Managed-Bean: Die Klasse heißt natürlich auch LoginController, nicht nur Login.
 

Fant

Bekanntes Mitglied
Beim Drücken des CommandButtons auf der login-Seite speicherst du Benutzer und Passwort in einer Instanz der Bean LoginController.

In der anderen Controller-Klasse wird ebenfalls ein Objekt der Klasse LoginController angelegt (oder ist das doch noch eine anderen Klasse mit dem Namen Login?) aus der du den usernamen ziehst. Da steht zu diesem Zeitpunkt aber doch nur ein leerer String drin. Folglich wird auch ein leerer String an die Funktion setOrder übergeben.

Andersherum das gleiche Spiel. In der Funktion setUsername in der Klasse LoginController legst du ein Objekt vom Typ Controller an. Mal abgesehen davon, dass ich im von dir geposteten Code die Funktion setqNumber nicht finden kann, musst du dir klar darüber sein, dass das nicht das gleiche Objekt ist, dass du später auf der anderen jsf-Seite über #{controller...} ansprichst.

Gruß Fant
 

Headhunter_X

Mitglied
Hallo Fant,

danke für die Info. Wenn das dann nicht mehr das gleiche Objekt ist, wie komme ich denn dann wieder an den Usernamen ran? Denn wenn ich auf der letzten Seite ein OutputLabel mit #LoginController.username setzte, gibt er den aktuellen Usernamen ja wieder aus.
 

Fant

Bekanntes Mitglied
In #{LoginController.userName} speicherst du ja auch auf der ersten Seite den Benutzernamen.

Mach auf deiner letzten Seite doch mal eine Ausgabe von dem, was in #{Controller.LoginController.userName} steht. DIESEN Wert versuchst du nämlich zu speichern!


Um an den gewünschten Wert zu kommen gibt es verschiedene Möglichkeiten. Du kannst per @Inject-Annotation die Werte aus der LoginController-Bean in die Controller-Bean injizieren. Oder du legst auf der ersten Seite nach erfolgreicher Anmeldung den Benutzer in der Session ab. Oder du übergibst den Wert per Request-Parameter, oder oder oder ... welcher Weg der beste ist hängt natürlich immer davon ab, was genau gemacht werden, wie schnell der Zugriff erfolgen muss, wie sicher das ganze gegenüber Manipulationen sein muss usw.

Gruß Fant
 

Headhunter_X

Mitglied
Hallo Fant,

danke für den Hinweis. Jetzt funktioniert es. Ich hab Dependency Injection gewählt.
Dafür hab ich dann den LoginController als <bean-property> bei Controller angegeben.
Zusätzlich dann noch get- und set-Methode in der Klasse Controller von LoginController angelegt und es läuft.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Daten einer Datenbank in ein Formular einfügen Web Tier 3
S Daten von Client empfangen Web Tier 1
J Servlet Einschätzung anderer zu Daten-Repositories Web Tier 3
N JSF CommandButton Daten aus anderem Form auslesen Web Tier 3
C JSF JSF Daten aus Klasse werden nicht angezeigt Web Tier 4
X SQL Datenbank-Daten in ApplicationScoped ManageBean zwischenspeichern? Web Tier 4
P JSF Primefaces Picklist-Ersatz mit vielen Daten Web Tier 4
F Wo und wie Daten die für alle Benutzer bestimmt sind verwalten Web Tier 4
P SelectOneMenu liest Daten nicht ein Web Tier 7
X JSP Auslesen der Daten einer Session Web Tier 3
R Daten Streamen mit Servlets. Web Tier 4
I JSF Daten aus Formular werden nicht übernommen Web Tier 6
T Post Daten Abfangen Web Tier 59
1 JSP Mit Daten einer c:forEach Rechnen ? Web Tier 4
T Daten - DB-Abfrage - Tabelle Web Tier 5
H Daten von Webseiten bekommen Web Tier 6
T Einfach nur Daten im JSP ausgeben Web Tier 2
S Daten zwischen 2 Servlets aus 2 Webapplikationen teilen? Web Tier 17
R Wo Daten manipulieren? Client oder Server? Web Tier 3
N Tabelle dynamisch mit Daten aus Datenbank füllen Web Tier 3
sliwalker forEach und Scriptlet: Daten aus Scriptlet in jstl sehen Web Tier 2
S [SelectItems value(herkunft bean)] in [UI:repeat] lädt daten nicht neu nach Web Tier 3
P Formular-Daten-Überprüfung - Eingaben im Fehlerfall behalten Web Tier 2
T Daten aus der Form holen Web Tier 2
U JSP form-Daten (ohne name-Attribut) an Servlet = Problem Web Tier 6
G Daten von ablaufenden Sessions speichern? Web Tier 3
G Ersetzen von @ManagedBean Annotation durch @named erzeugt Fehler Web Tier 3
T JSF Primefaces beim öffnen eines p:dialog wird eine neue View ManagedBean erstellt Web Tier 2
V JSF ManagedBean-Properties und "Alias" Web Tier 8
S NullPointerException in ManagedBean? Web Tier 4
O JSF ManagedBean vertauscht Clients Web Tier 11
E JSF JSF findet Property im ManagedBean nicht Web Tier 5
E JSF MangedBean ruft andere ManagedBean auf Web Tier 3
F Property in ManagedBean nicht gefunden? Web Tier 3
T JSF @ManagedBean nicht erkannt Web Tier 3
M JSF: ManagedBean in RequestScope-MB nutzen Web Tier 2

Ähnliche Java Themen


Oben