java - Sessionscoped托管bean不保存变量jsf

标签 java jsf xhtml managed-bean session-bean

我对托管 session 范围 bean 有一个奇怪的问题。我对 jsf 很陌生,这看起来很奇怪。案例是: loginBean存储一些登录成功后初始化的变量。第一次,它们被初始化,但成功登录后,用户被重定向到 profile.xhtml 页面,在该页面中我从 loginBean 调用这些变量。在此页面中,loginBean 中的变量为 null。所以重定向后我丢失了所有数据。

登录Bean:

package beans;

import facades.ContactFacade;
import facades.UsersFacade;
import java.io.Serializable;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import model.Contact;

@ManagedBean(name="loginBean")
@SessionScoped

public class LoginBean implements Serializable{
    @EJB
    private ContactFacade contactFacade;
    @EJB
    private UsersFacade usersFacade;

private String Name;
private String Password;
private int ContactID;
private Contact contact;

public LoginBean() {

}

public Contact getContact() {
    return contact;
}

public void setContact(Contact contact) {
    this.contact = contact;
}
public String getName() {
    return Name;
}

public void setName(String Name) {
    this.Name = Name;
}

public String getPassword() {
    return Password;
}

public void setPassword(String Password) {
    this.Password = Password;
}
public int getContactID() {
    return ContactID;
}

public void setContactID(int ContactID) {
    this.ContactID = ContactID;
}

private boolean checkValidity(){
    return (
            (getName()!=null&&getName().length()>0)
            &&(getPassword()!=null&&getPassword().length()>0))
            ?true:false;
}
public String login(){
    if(checkValidity()&&usersFacade.tryLogin(getName(), getPassword())){
        setContactID(usersFacade.getContactID(getName()));

        getContactInstance();
        return "profile.xhtml?faces-redirect=true";
    }else{
        return "loginError.xhtml?faces-redirect=true";
    }
}

private void getContactInstance(){
    setContact(contact);
    this.contact=contactFacade.getContact(getContactID());
} 

public String getDepartment(){
    return contactFacade.getDepartmentName(getContact().getDepartment());
}
}

profile.xhtml jsf

<h:form>
        <h2>My information</h2>
        <h:panelGrid columns="2">
            <h:outputLabel value="Name:"/>
            <h:outputLabel value="#{loginBean.contact.name}"/>

            <h:outputLabel value="Lastname:"/>
            <h:outputLabel value="#{loginBean.contact.lastname}"/>

            <h:outputLabel value="Address:"/>
            <h:outputLabel value="#{loginBean.contact.address}"/>

            <h:outputLabel value="Telephone:"/>
            <h:outputLabel value="#{loginBean.contact.telephone}"/>

            <h:outputLabel value="Email:"/>
            <h:outputLabel value="#{loginBean.contact.email}"/>

            <h:outputLabel value="Department:"/>
            <h:outputLabel value="#{loginBean.department}"/>

            <h:commandButton id="btnChange" value="Change Info" />


        </h:panelGrid>

    </h:form>

这对我来说很奇怪。有人可以帮忙吗?提前致谢

最佳答案

您是否覆盖了 faces-config.xml 中的 bean?如果是这样,xml 中定义的 bean 将具有更高的优先级,注释将被忽略。

关于java - Sessionscoped托管bean不保存变量jsf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30828406/

相关文章:

java - 在 play 2.0.3 中拒绝表单而不重新加载页面

css - 如何更改 Primefaces 面包屑中的主页图标?

validation - 暂时禁用 JSF 验证

java - X509 扩展

java - 为什么 spring Data REST 在序列化实体时忽略 @javax.persistence.Version 字段?

java - Selenium 网络驱动程序 : How to select the dynamically generated button by taking the reference of previuos tag's xpath

javascript - 如何将支持 bean 值传递给 JavaScript?

css - PrimeFaces RowEditor - 不显示图标

java - Seam 自动创建不起作用?

javascript - 当用户点击使用 javascript 函数时显示一个 div