Spring JSF在不同用户的组件中保存值

Spring JSF在不同用户的组件中保存值,spring,jsf,jsf-2,Spring,Jsf,Jsf 2,我是JSF新手,我正在尝试使用JSF2和Richfaces+Spring3.2.3+Hibernate3.6。应用服务器是JBoss7.1。问题是,当我部署应用程序并在我的计算机中使用它时,它工作得很好,但当我在局域网中的另一台计算机或同一台计算机中的其他浏览器中使用它时,第一次使用时存储的所有值都会在所有字段中设置。我不得不说,该应用程序运行良好,但似乎有一个用户正在使用它,即使我在不同的计算机上同时使用它 我也在Cloudbees中部署了它,但通过internet它也有同样的问题 警察局。我

我是JSF新手,我正在尝试使用JSF2和Richfaces+Spring3.2.3+Hibernate3.6。应用服务器是JBoss7.1。问题是,当我部署应用程序并在我的计算机中使用它时,它工作得很好,但当我在局域网中的另一台计算机或同一台计算机中的其他浏览器中使用它时,第一次使用时存储的所有值都会在所有字段中设置。我不得不说,该应用程序运行良好,但似乎有一个用户正在使用它,即使我在不同的计算机上同时使用它

我也在Cloudbees中部署了它,但通过internet它也有同样的问题

警察局。我搜索了其他类似的问题,但找不到答案

My login.xhtml:

<h:form>                
            <h:panelGrid columns="2">
                <h:outputLabel value="Usuario "/>
                <h:inputText id="txt_usuario" value="#{login.usuario}" required="true" requiredMessage="Debe ingresar su usuario."/><br/>
                <h:message for="txt_usuario" />

                <h:outputLabel value="Password "/>
                <h:inputSecret id="pwd_password" value="#{login.password}" required="true" requiredMessage="Debe ingresar su password."/><br/>
                <h:message for="pwd_password" />
            </h:panelGrid>
            <h:commandButton value="Login" action="#{login.iniciarSesion()}"/>
        </h:form>

我不理解你的问题,但是@RequestScoped应该足够用于登录表单…它可以工作,但我尝试在两台计算机上同时使用它。我在第一台计算机上登录,然后转到另一台计算机,当我想使用它时,usuario字段中的值已经设置为我在第一台计算机上写入的值。如果我想在两种不同的浏览器中使用它,也会发生同样的情况。如果我在第二台计算机上登录,它会覆盖另一台计算机上的值。由于这个原因,我不能有不同的用户。这种行为不应该发生,你应该为每个浏览器/每台计算机获得一个单独的会话。登录表单不需要@SessionScope,但它没有解释问题。对不起,我帮不了你什么忙!我也这么认为。也许SessionScoped或ManagedBean注释的行为类似于EJB中的有状态Bean,但我从未使用过它,我只是读过它,我不知道这是否是真的。你在这里混淆了一堆东西,这将使你的故障排除变得更加困难:JSF@ManagedBean将没有usuarioService,因为Spring不会自动连接到不在其上下文中的bean中。这给您留下的是LoginController存在于两种不同的上下文中:Spring和JSF
package com.ejemplo.app.controller;

import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.ejb.PostActivate;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.ejemplo.app.entidades.Usuario;
import com.ejemplo.app.service.UsuarioService;
import com.ejemplo.app.util.Constantes;

@Component("login")
@ManagedBean(name = "login")
@SessionScoped
public class LoginController {

    @Autowired
    private UsuarioService usuarioService;

    private String usuario;
    private String password;

    public LoginController() {

    }

    public String iniciarSesion() {
        try {
            Usuario login = usuarioService.validarIngreso(usuario, password);

            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.getApplication().createValueBinding("#{sessionScope.user}").setValue(facesContext, login);

            if(login.getTipo().equalsIgnoreCase(Constantes.CARGO_RESIDENTE))
                return "residente/home";
            else if(login.getTipo().equalsIgnoreCase(Constantes.CARGO_LOGISTICA))
                return "logistica/home";
            else if(login.getTipo().equalsIgnoreCase(Constantes.CARGO_ADMINISTRADOR))
                return "administrador/home";
            else
                System.err.println("Usuario no encontrado.");

        } catch (Exception e) {
            System.err.println(e.getMessage());
            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Usuario no encontrado.", "Descripcion del mensaje."));
        }       
        return "solicitud_materiales";      
    }

    public String getUsuario() {
        return usuario;
    }
    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

}