2012-07-20 2 views
0

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> 
+0

여기서 인수가없는 생성자는 무엇입니까? 매니지드 빈은 no-arg 생성자를 가져야한다. –

+1

@ a.u.r : 나는 당신의 코멘트를 이해할 수 있을지 모르지만, 생성자 인'enum'을 혼란스럽게하지는 않습니까? 어쨌든 클래스에 생성자가 포함되어 있지 않으면 Java는 항상 암묵적으로 기본 공개형 인수없는 생성자를 제공합니다. 이 생성자가 실제로 누락 된 경우 OP는 완전히 다른 예외를 가져 왔습니다. – BalusC

+0

@BalusC, 나는 여기에 결석 한 디폴트 생성자에 대해 이야기하고 있었다; 그것이 내게 시간이 오래 걸리는 오류를 발생 시켰기 때문입니다. 다른 예외를주는 OP에 대해 당신이 맞다고 생각합니다. –

답변

7

관리 속성은 세터를 통해 설정이 UserBean 클래스입니다. 그래서 당신은 정말로 그들을 제공해야합니다. 또한 Java는 대소 문자를 구분합니다. 성 및 이름 속성은 firstNamelastName 대신 faces-config.xml이 아닌 firstnamelastname이라는 게터 이름을 기반으로합니다. 적절하게 수정하십시오. getFirstname() 대신 getFirstName()setFirstName()을 사용하십시오. 또는 IDE를 사용하여 속성을 기반으로 getters/setters를 자동 생성하십시오.

그런데 왜 그 속성은 static으로 선언됩니까? 이렇게하면 모두 명의 사용자가 webapp을 사용하여 공유하게됩니다. 이게 니가 원하는거야?

+0

은 firstname, lastname을 수정 한 것 같습니다.하지만 id/lastname이 아닌 setter가 필요한 이유는 무엇입니까? ID는 유효성 검사 후 이름과 함께 설정됩니다. – Austin

+0

또한 설정자가 필요합니다. 나는 코드를 잘못 읽었고 이미 설정자가 있다고 가정했지만 철자가 잘못되었다고 생각했습니다. 나는 대답을 업데이트했다. – BalusC

+0

그래서 모든 세 속성에 대한 setters/getters를 작성했으며 faces-config에서 firstName lastName으로 작업했습니다. 이 대답을 받아 들일 수 있지만 확실하지 왜 내가 별도의 작업, setter 자체가 아닌 부산물로 설정할 속성에 대한 setters가 있어야합니다 – Austin

관련 문제