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
Vous devez vous connecter pour publier un commentaire.
Géré propriétés sont définies par les organismes de normalisation. Si vous avez vraiment besoin de les fournir. Notez également que Java est sensible à la casse. Votre nom et prénom, et les propriétés sont basées sur la lecture des noms appelé
firstname
etlastname
au lieu defirstName
etlastName
comme prévu parfaces-config.xml
. Corrigé en conséquence. UtilisationgetFirstName()
etsetFirstName()
au lieu degetFirstname()
et ainsi de suite. Ou, mieux, juste avoir votre IDE de générer automatiquement les getters/setters sur la base de propriétés.En passant, pourquoi les propriétés déclarées
static
? De cette façon, ils seront partagés à travers tous les utilisateurs qui sont à l'aide de la webapp. Est-ce vraiment ce que vous voulez?