DB에 액세스하는 간단한 로그인 페이지를 만들려고합니다. 사용자 이름과 암호가 유효 할 때 id, firstName, lastName이 액세스 할 수 있도록 클래스 내에 설정됩니다. 그래도이 오류가 발생합니다.관리 빈을 만들 수 없습니다. UserBean - JSF
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)
id, firstName, lastName은 getter가 있지만 유효성 검사 후에 설정되므로 setter가 없습니다. 여기
는
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;
}
내 얼굴-설정
<?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>
여기서 인수가없는 생성자는 무엇입니까? 매니지드 빈은 no-arg 생성자를 가져야한다. –
@ a.u.r : 나는 당신의 코멘트를 이해할 수 있을지 모르지만, 생성자 인'enum'을 혼란스럽게하지는 않습니까? 어쨌든 클래스에 생성자가 포함되어 있지 않으면 Java는 항상 암묵적으로 기본 공개형 인수없는 생성자를 제공합니다. 이 생성자가 실제로 누락 된 경우 OP는 완전히 다른 예외를 가져 왔습니다. – BalusC
@BalusC, 나는 여기에 결석 한 디폴트 생성자에 대해 이야기하고 있었다; 그것이 내게 시간이 오래 걸리는 오류를 발생 시켰기 때문입니다. 다른 예외를주는 OP에 대해 당신이 맞다고 생각합니다. –