# JSF - Anfängerprobleme



## hyperion (27. Jan 2011)

Hallo,

ich habe nun begonnen mich mit JSF zu beschäftigen. Ich wollte damit anfangen eine Seite für einen Login und eine für eine Registrierung zu erstellen.  Das sieht momentan so aus:

login.xhtml

```
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>Login</title>
    </h:head>
    <h:body>
        <h:outputText value="Willkommen" />
        <h:panelGrid id="loginPanelGrid" columns="2">
            <h:outputText value="Loginname:" />
            <h:inputText id="loginName" value="#{loginBean.loginName}" />
            <h:outputText value="Passwort:" />
            <h:inputSecret id ="password" value="#{loginBean.password}" />
        </h:panelGrid>
        <h:commandButton id="login" action="#{loginBean.validate}" value="Login" />
        <br />
        <h:link id="registerLink" value="Registrieren" outcome="register" />
    </h:body>
</html>
```

register.xhtml

```
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>Registrierung</title>
    </h:head>
    <h:body>
        <h:panelGrid id="registerPanelGrid" columns="2">
            <h:outputText value="Loginname:" />
            <h:inputText id="loginName" value="#{registerBean.loginName}" />

            <h:outputText value="Passwort:" />
            <h:inputSecret id ="password" value="#{registerBean.password}" />

            <h:outputText value="Name:" />
            <h:inputText id="name" value="#{registerBean.name}" />

            <h:outputText value="Vorname:" />
            <h:inputText id="firstName" value="#{registerBean.firstName}" />

            Weitere Felder...

        </h:panelGrid>
    </h:body>
</html>
```

Leider funktioniert der Link mit der id "registerLink" nicht. Es passiert nichts. Wundert mich aber auch nicht, da der Server nicht weiß was er mit outcome="register" anfangen soll. Ich habe gelsen, dass ich jetzt eine navigation-rule anlegen muss, welche beschreibt für welchen outcome Wert welche Seite aufgerufen werden soll. Wenn ich das richtig verstehe, soll ich das in der faces-config.xml eintragen, allerdings hat mir NetBeans keine faces-config.xml erzeugt. 
Wie genau muss die Datei aussehen und wo sollte die sein?

registerBean und loginBean existieren noch nicht. Das ist ein problem dem ich mich später noch stellen werde. Jetzt soll erstmal nur der Link funktionieren

Gruß hyperion


----------



## hyperion (28. Jan 2011)

Hallo,

der Link funktioniert nun. 

Das nächste Problem ist, dass ich nicht mehr von der Registrierungsseite runterkomme.

Aktuell sieht es so aus:

register.xhtml

```
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Registrierung</title>
    </h:head>
    <h:body>
        <h:panelGrid id="registerPanelGrid" columns="2">
            <h:outputText value="Loginname:" />
            <h:inputText id="loginName" value="#{registerBean.loginName}" maxlength="45"/>

            <h:outputText value="Passwort:" />
            <h:inputSecret id ="password" value="#{registerBean.password}" maxlength="45"/>

            <h:outputText value="Name:" />
            <h:inputText id="name" value="#{registerBean.name}" maxlength="45"/>

            ...Ein paar Felder mehr...

        </h:panelGrid>

         <h:commandButton id="register" value="Login" action="#{registerBean.register}" />

    </h:body>
</html>
```

RegisterBean.java

```
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.util.Date;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

/**
 *
 * @author Max
 */
@ManagedBean
@RequestScoped
public class RegisterBean {

    private String loginName;
    private String password;
    private String name;
    ...Some more...

    ...Setter und Getter für alle Instanzvariablen...

    public String register(){
        
        return "/login.xhtml";
    }

}
```

Ich würde jetzt eigentlich erwarten, dass wenn ich auf der Seite register.xhtml bin und den Button mit der id="register" drücke, dass dann die Methode register() der Klasse RegisterBean aufgerufen wird und diese "/login.xhtml" zurückliefert. Also sollte in action des Buttons "/login.xhtml" stehen. Eine Navigation zu dieser Seite passiert aber nicht. Eigentlich passiert einfach nichts. Woran liegt das?

Gruß hyperion


----------



## hyperion (29. Jan 2011)

Hallo,

so doch noch den Fehler gefunden. Der commandButton muss innerhalb der form sein.

Gruß hyperion


----------

