0

我正在做我的第一个 JSF 应用程序并且我正在实现登录页面。但是当我提交带有登录名和密码的表单时遇到问题。我使用 JSF 2.0

我有以下表格:

<h:form>
            <h:panelGrid columns="2">
                <p:outputLabel for="txt_login" value="Login" />
                <p:inputText id="txt_login" value="#{loginBean.login}"/>
                <p:outputLabel for="txt_senha" value="Senha" />
                <p:inputText id="txt_senha" value="#{loginBean.senha}"/>
            </h:panelGrid>
            <h:panelGrid columns="2">
                <p:commandButton value="Login" action="#{loginBean.efetuaLogin}" />
                <p:commandButton value="Cancelar" action="cancelar" />
            </h:panelGrid>
</h:form>

和 ManagedBean:

@ManagedBean
public class LoginBean {

private String login;
private String senha;

public String getSenha() {
    return senha;
}

public void setSenha(String senha) {
    System.out.println("SENHA = " + this.getSenha());
    this.senha = senha;
}

public String getLogin() {
    return login;
}

public void setLogin(String login) {
    System.out.println("USER = " + this.getLogin());
    this.login = login;
}

public String efetuaLogin() {
    Usuario user = new Usuario(this.login, this.senha);
    System.out.println("USER = " + this.getLogin() + " SENHA = " + this.getSenha());
    UsuarioController.getInstance().save(user);
    return "sucesso";

}

public String cadastar() {
    Usuario user = new Usuario(this.login, this.senha);
    System.out.println("USER = " + this.login + " SENHA = " + this.senha);
    UsuarioController.getInstance().save(user);
    return "sucesso";
}

}

当提交这些表单时,我的托管 bean 将传递 null。为什么会发生?

4

2 回答 2

0

为 ManagedBean 添加范围,对于登录添加@RequestScoped。您用于<h:inputText密码。请<h:inputSecret/>用于密码。

于 2013-06-30T17:35:01.687 回答
0

你打电话System.out.println太早了,因此你认为你得到了,null但你没有。例子:

public void setSenha(String senha) {
    System.out.println("SENHA = " + this.getSenha());
    this.senha = senha;
}

应该

public void setSenha(String senha) {
    this.senha = senha;
    System.out.println("SENHA = " + this.getSenha());
}

同样的事情setLogin(String login)

更新#2 您的问题一定出在其他地方。检查您是否为 primefaces 使用了正确的命名空间

xmlns:p="http://primefaces.org/ui

据我所知,所有 primefaces 组件都为我工作。例如,这里是我的代码。尝试针对.xhtml您发布的原件运行它。唯一的区别是我在上面告诉你的编辑,而我LoginBean没有UsuarioController.getInstance().save(user);

import javax.faces.bean.ManagedBean;

@ManagedBean
public class LoginBean {

    private String login;
    private String senha;

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
        System.out.println("SENHA = " + this.getSenha());

    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
        System.out.println("USER = " + this.getLogin());
    }

    public String efetuaLogin() {
        User user = new User(this.login, this.senha);
        System.out.println("USER = " + this.getLogin() + " SENHA = " + this.getSenha());
        System.out.println("ACTUAL USER = " + user.getLogin() + " ACTUAL SENHA = " + user.getSenha());
        return "sucesso";
    }

    public String cadastar() {
        return "sucesso";
    }
}


public class User {
    private String login; 
    private String senha; 

    public String getLogin() {
        return login;
    }

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

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public User(String login, String senha) {
        this.login = login;
        this.senha = senha;
    }

    public User() {
    }
}
于 2013-06-30T18:36:06.520 回答