Impossible de créer le managed bean UserBean - JSF

Je suis en train de créer une simple page de connexion qui accède à une base de données de sorte que lorsque le nom d'utilisateur et mot de passe sont validées, l'id, firstName, lastName sont définies dans la classe ainsi que pour l'accès. J'obtiens cette erreur si:

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)

J'ai getters pour id, firstName, lastName, mais pas de poseurs parce qu'ils sont définis après validation.

Ici est de classe 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;
}

et mes 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>
  • où est le non-arg constructeur ? managed-bean DOIT avoir un no-arg constructeur
  • Je ne suis pas sûr si je comprends bien votre commentaire, mais n'êtes-vous pas confondre le enum être le constructeur? De toute façon, Java sera toujours implicitement fournir une valeur par défaut public de non-arg constructeur si la classe ne contient pas tout les constructeurs. Si ce constructeur était vraiment manquant, l'OP aurait obtenu un de complètement différent exception.
  • Je parlais de l'absence de constructeur par défaut ici; car elle a généré une erreur qui m'a pris longtemps pour comprendre.. je pense que vous avez raison au sujet de l'OP de donner une autre exception
  • Allez apprendre les fondamentaux de Java: docs.oracle.com/javase/tutorial/java/javaOO/constructors.html
InformationsquelleAutor Austin | 2012-07-20