首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法创建托管bean UserBean - JSF

无法创建托管bean UserBean - JSF
EN

Stack Overflow用户
提问于 2012-07-20 23:56:03
回答 1查看 16.6K关注 0票数 0

我正在尝试创建一个简单的登录页面来访问DB,以便在验证用户名和密码时,还可以在类中为访问设置id、firstName和lastName。但是我得到了这个错误:

代码语言:javascript
运行
复制
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方法,因为它们是在验证之后设置的。

下面是UserBean类

代码语言:javascript
运行
复制
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;
}

和我的faces-config

代码语言:javascript
运行
复制
 <?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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-21 00:00:13

托管属性是通过setter设置的。所以你真的需要提供它们。还要注意,Java是区分大小写的。您的名字和姓氏属性基于名为firstnamelastname的getter名称,而不是faces-config.xml所期望的firstNamelastName。相应地修复它。使用getFirstName()setFirstName()代替getFirstname(),依此类推。或者,更好的方法是让IDE根据属性自动生成better /better。

顺便问一下,为什么这些属性被声明为static?这样它们就可以在所有使用用户之间共享。这真的是你想要的吗?

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11582881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档