目标无法访问,'null'在JSF2中返回null

时间:2014-01-04 18:35:57

标签: jsf jsf-2

我是JSF的新手,我遇到了这个问题。我正在阅读一些有关这方面的帖子,但我可以找到答案(或者我没理解一个......)。 我有以下用户bean:

import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean(name="user")
@SessionScoped
public class User implements Serializable {

    private String login;


    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }
}

和登录bean:

@ManagedBean(name="login")
@SessionScoped
public class Login implements Serializable{
    private static final long serialVersionUID = 1L;

    @ManagedProperty("#{user}")
    private User user;
    @PostConstruct
    public void init() {
        System.out.println("Init called");
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

我的观点如下:

<h:inputText id="login" value="#{login.user.login}" required="true"/>
<h:commandButton value="Login" action="#{login.user.login}"/><br/>

我希望能够访问几个classess中的用户字段,以及我如何尝试实现此目的。不幸的是我一直有这个错误。 我找到了一些我需要的信息beans.xml。真的吗?我在哪里可以找到样品?我正在使用JSF2。

答案 我的错是我为字段和登录方法选择了相同的名称。因此,我使用login.login(在实施用户类之前)进行geting登录,将login.login用作commandButton的操作。实现用户类后,我将login.login更改为login.user.login。  再次感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您正在将方法User#login()绑定到您不存在的CommandButton。只有一个属性login(获取/设置)。

您需要在User bean中使用适当的操作方法:

import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean(name="user")
@SessionScoped
public class User implements Serializable {

    private String login;


    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public void doLogin() { 
        // whatever you want to do here
    }
}

并绑定到doLogin()方法:

<h:commandButton value="Login" action="#{login.user.doLogin}"/>
启用CDI需要

beans.xml,您不在此处使用。您正在使用jsf托管bean。 CDI是一种更强大的替代方案。