Announcement

Collapse
No announcement yet.

#{Login.username} wird nicht aufgelöst

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • #{Login.username} wird nicht aufgelöst

    Hey ich habe ein kleines Problem.

    In den Beispielen für ein Loginformular wird oft
    <h:inputText value="#{Login.username}" />
    verwendet.
    Komischerweise funktioniert das bei mir nicht. Im Textfeld wird beim ersten Aufruf #{Login.username} als String angezeigt und beim drücken das Loginbuttons wird zwar die checkLogin ausgeführt und auch der leere Konstrukter aufgerufen aber kein Setter. Dadurch sind die Variablen natürlich immer leer.
    In JSF bin ich ziemlich neu und komm grad einfach nicht weiter, weil ich der einzige im Internet mit diesem Problem zu sein scheine.

    Hat jemand eine Idee?

    login.jsp:
    Code:
    <body>
    <ui:composition template="/style/template.xhtml">
    <f:view>
    <ui:define name="content">
    <h:form>
    <h:outputLabel>Benutzername:</h:outputLabel>
    <h:inputText value="#{Login.username}" />
    <h:outputLabel>Passwort:</h:outputLabel>
    <h:inputText value="#{Login.passwort}" />
    <h:commandButton value="Login" action="#{Login.checkLogin}" />
    </h:form>
    </ui:define>
    </f:view>
    </ui:composition>
    </body>
    Login.java:
    Code:
    public class Login
    {
    private String username;
    private String passwort;
    
    public Login(){
    
    }
    public String getUsername(){
    return this.username;
    }
    public void setUsername(String username){
    this.username = username;
    }
    public String getPasswort(){
    return this.passwort;
    }
    public void setPasswort(String passwort){
    this.passwort = passwort;
    }
    public String checkLogin(){
    System.out.println(username);
    System.out.println(passwort);
    if(this.username != null && this.passwort != null)
    {
    if(this.username.equals("admin") && this.passwort.equals("test"))
    {
    return "success";
    }
    else
    {
    return "fail";
    }
    }
    else
    {
    return "fail";
    }
    }
    }
    faces-config.xml:
    Code:
    <managed-bean>
    <managed-bean-name>Login</managed-bean-name>
    <managed-bean-class>projekt.beans.Login</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
    
    <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet>
    
    <navigation-rule>
    <from-view-id>/login.jsp</from-view-id>
    <navigation-case>
    <from-action>#{Login.checkLogin}</from-action>
    <from-outcome>success</from-outcome>
    <to-view-id>/index.jsp</to-view-id>
    </navigation-case>
    <navigation-case>
    <from-action>#{Login.checkLogin}</from-action>
    <from-outcome>fail</from-outcome>
    <to-view-id>/login.jsp</to-view-id>
    </navigation-case>
    </navigation-rule>

  • #2
    Der Servlet -Teil aus deiner faces.config gehört in die web.xml
    Christian

    Comment


    • #3
      Danke.
      Das ist mir letzte Nacht auch schon aufgefallen... Aber das ändert nix.
      Anscheinend werden die "#bla"-Befehle nicht interpretiert sondern immer als Text ausgegeben. Hab das auch grad mal in einem Label versucht.

      Comment


      • #4
        wie sieht die web.xml aus?
        Christian

        Comment


        • #5
          <?xml version="1.0" encoding="ISO-8859-1"?>

          <web-app id="APP" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

          <context-param>
          <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
          <param-value>server</param-value>
          </context-param>

          <servlet>
          <servlet-name>Faces Servlet</servlet-name>
          <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
          <load-on-startup>1</load-on-startup>
          </servlet>

          <servlet-mapping>
          <servlet-name>Faces Servlet</servlet-name>
          <url-pattern>*.jsf</url-pattern>
          </servlet-mapping>

          <welcome-file-list id="WelcomeFileList">
          <welcome-file>login.jsf</welcome-file>
          </welcome-file-list>

          </web-app>

          Comment


          • #6
            <url-pattern>*.jsf</url-pattern>

            Wenn du dann allerdings eine

            index.jsp
            oder
            login.jsp

            hast, werden die nicht durch den JSF Kontext bearbeitet
            Christian

            Comment


            • #7
              Danke. Das war mir bewusst. Habs auch gleich geändert. Aber das war bisher kein Problem. Im Browser ruf ich ja die .jsf auf.
              wie gesagt der befehl im action vom button wird auch aufgerufen. aber die variablen halt nicht mitgeschickt.

              Comment


              • #8
                Was ist den nun der Fehler? Eimal sagst du, dass die #bla"-Befehle nicht interpretiert sondern immer als Text ausgegeben" werden (das nennt man Expressions) anderseits wird die Expression in der Action ausgeführt.? Ändere mal den scope der Bean von request auf session.
                Christian

                Comment


                • #9
                  Genau das ist der Fehler....
                  Im <h:commandButton> wird die Expression ausgeführt (die Methode in der Bean wird wirklich aufgerufen)
                  In <h:inputText> wird die Expression nicht aufgelöst sondern als String angezeigt. (auch die getter und setter der Bean werden nicht angerührt... Ich hab eine Testausgabe gemacht innerhalb der setter und getter, die aber nicht ausgegeben werden. Folglich werden die Variablen der Bean nie gesetzt und in der Methode die durch den CommandButton aufgerufen wird, treten natürlich Fehler auf, da die Variablen NULL sind.

                  Comment


                  • #10
                    Wenn dort der Text der Expression steht, deutet es darauf hin, das diese eben nicht durch JSF geparst wird. Warum dann 3 Zeilen weiter wiederum die action ausgeführt wird, erschließt sich nicht.
                    Christian

                    Comment


                    • #11
                      Da du ja wahrscheinlich JSF 2.0 benutzt, versuche das doch mal über Annotation und nicht definieren in der XML
                      Christian

                      Comment


                      • #12
                        Ok war eine sehr gute Idee. Führt aber leider zum gleichen Ergebnis. -.-

                        Comment


                        • #13
                          Schick mir mal das Projekt
                          Christian

                          Comment


                          • #14
                            http://www.marquardtnet.info/cecke/l...plication1.zip

                            Liegt ein funktionierendes Projekt mit deinen Formular und deiner Klasse
                            Christian

                            Comment


                            • #15
                              Ok ich hab keine Ahnung was ich gemacht hab. Irgendwie hab ich Eclipse zerschossen.
                              Hab den Workspace rauskopiert, neu gestartet, dann gings wieder.
                              Projekt neu erstellt und die Dateien wieder eingefügt und schon ging es.
                              Ich hab keine Ahnung was jetzt anders sein soll. Eigentlich ist alles gleich.
                              Zum Glück hab ich irgendwo noch eine Kopie des alten Projektes. Ich werde dann mal Recherche betreiben woran es lag. Bis dahin kann dieses Thema erstmal geschlossen werden. Danke

                              Comment

                              Working...
                              X