Nicht zum erstellen von verwalteten bean UserBean - JSF
Ich versuche, erstellen Sie eine einfache login-Seite für den Zugriff auf einen DB, so dass, wenn Benutzername und Passwort werden überprüft, die id, firstName, lastName werden in der Klasse sowie für den Zugang. Ich bekomme diese Fehlermeldung, obwohl:
javax.servlet.ServletException: Unable to create managed bean UserBean. The following problems were found:
- Property firstName for managed bean UserBean does not exist. Check that appropriate getter and/or setter methods exist.
- Property id for managed bean UserBean does not exist. Check that appropriate getter and/or setter methods exist.
- Property lastName for managed bean UserBean does not exist. Check that appropriate getter and/or setter methods exist.
javax.faces.webapp.FacesServlet.service(FacesServlet.java:321)
Habe ich Getter für id, firstName, lastName, aber keine setter, weil Sie nach der Validierung.
Hier ist Klasse UserBean
public class UserBean {
private static String password, username, id, firstName, lastName;
public enum DBfields { BLANK, USERNAME, ID, PASSWORD, FIRSTNAME, LASTNAME };
public String getPassword() {
return password;
}
public void setPassword( String value ) {
password = value;
}
public String getUsername() {
return username;
}
public void setUsername( String value ) {
username = value;
}
public static String getId() {
return id;
}
public static String getFirstname() {
return firstName;
}
public static String getLastname() {
return lastName;
}
public String loginUser() throws Exception {
if( loginValidate( username, password ) )
return "success";
else
return "fail";
}
public static boolean loginValidate( String username, String Password ) throws Exception{
String DBuser;
String DBpass = "asdf";
PreparedStatement table = connectToTable( "firstsql", "users");
ResultSet row = table.executeQuery();;
while(row.next()){
DBuser = row.getString(DBfields.USERNAME.name());
if(username.equals(DBuser)){
DBpass = row.getString(DBfields.PASSWORD.name());
break;
}
}
if(password.equals(DBpass)){
id = row.getString(DBfields.ID.name());
firstName = row.getString(DBfields.FIRSTNAME.name());
lastName = row.getString(DBfields.LASTNAME.name());
return true;
} else
return false;
}
und meine faces-config
<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="2.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
<managed-bean>
<managed-bean-name>UserBean</managed-bean-name>
<managed-bean-class>com.jfsdemo.bean.UserBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>firstName</property-name>
<property-class>java.lang.String</property-class>
<value/>
</managed-property>
<managed-property>
<property-name>id</property-name>
<property-class>java.lang.String</property-class>
<value/>
</managed-property>
<managed-property>
<property-name>lastName</property-name>
<property-class>java.lang.String</property-class>
<value/>
</managed-property>
<managed-property>
<property-name>password</property-name>
<property-class>java.lang.String</property-class>
<value/>
</managed-property>
<managed-property>
<property-name>username</property-name>
<property-class>java.lang.String</property-class>
<value/>
</managed-property>
</managed-bean>
<navigation-rule>
<from-view-id>/login.xhtml</from-view-id>
<navigation-case>
<from-action>#{UserBean.loginUser}</from-action>
<from-outcome>success</from-outcome>
<to-view-id>/timesheet.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-action>#{UserBean.loginUser}</from-action>
<from-outcome>fail</from-outcome>
<to-view-id>/login.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/timesheet.xhtml</from-view-id>
</navigation-rule>
</faces-config>
- wo ist der no-arg-Konstruktor ? eine managed-bean MUSS eine no-arg Konstruktor
- Ich bin mir nicht sicher, ob ich verstehe deinen Kommentar, aber Sie sind nicht verwirrend, die
enum
wird der Konstruktor? Sowieso, Java wird implizit immer eine Standard public no-arg-Konstruktor, wenn die Klassen enthalten keine Konstruktoren. Wenn dieser Konstruktor wurde wirklich fehlt, ist die OP würde bekommen haben eine völlig andere Ausnahme. - Ich war im Gespräch über den abwesenden default-Konstruktor hier, wie es generiert einen Fehler, nahm mir lange Zeit, um herauszufinden,.. ich denke, du hast Recht über die OP gibt, ist eine andere Ausnahme
- Gehen lernen Sie die grundlegenden Java: docs.oracle.com/javase/tutorial/java/javaOO/constructors.html
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwaltete Eigenschaften werden durch die setter. So dass Sie wirklich brauchen zur Verfügung zu stellen. Beachten Sie außerdem, dass Java groß-und Kleinschreibung. Ihre ersten und letzten Namen von Eigenschaften werden auf der Grundlage der getter Namen genannt
firstname
undlastname
stattfirstName
undlastName
wie erwartet durchfaces-config.xml
. Befestigen Sie es entsprechend. VerwendengetFirstName()
undsetFirstName()
stattgetFirstname()
und so weiter. Oder, besser, nur haben Sie Ihre IDE automatischen Generierung der Getter/setter basierend auf Eigenschaften.By the way, warum sind diese Eigenschaften erklärt
static
? Auf diesem Weg werden Sie gemeinsam über alle Benutzer, die mithilfe der webapp. Ist das wirklich das, was Sie wollen?