2011-01-25 6 views
0

먼저 내 영어로 유감스럽게 생각합니다. 나는 여러 가지 독일어 포럼에 내 질문을 넣었지만 답변을 얻지 못했습니다 .-(어쩌면 당신이 나를 도울 수 있습니다.JSF 범위 문제

나는 JSF 2.0에서 작업합니다. 저장 - 그것은 문제가되지 않습니다

내 문제는 이것이다 :.. 내가 2 사용자 시스템에 한 로그를 사용 예 : 한 ->은 메세지를 지정하지 않고 백엔드 서버로 전송됩니다 -> 메시지가 사용자 정보와 함께 수신됩니다 - > 사용자 ID가 1로 설정됩니다. 사용자 2가 시스템에 로그인합니다. -> -> 사용자 ID는 2로 설정됩니다. 그러나 사용자 1의 ID도 1로 설정됩니다. 즉, 두 사용자가 공유 함을 의미합니다 내 사용자의 한 인스턴스 수업? 각 사용자가 자신의 정보 만 저장된 java 클래스의 인스턴스를 가져온 것으로 생각했습니다.

<h:body> 
<f:view> 
<h:inputText id="name" value="#{user.name}" /> 
<h:inputSecret id="passwort" value="#{user.password}" /> 
.... 
<h:commandButton id="login" action="#{communicator.validate}" /> 

당신은 사용자가 입력하고 커뮤니케이터는 백엔드에 메시지를 전송하고이를 수신 passwort

login.xhtml : 여기

는 비트 코드이다.

Communicator.java

@ManagedBean(name = "communicator") 
@SessionScoped 
public class Communicator implements EventReceiver { 

    @ManagedProperty(value = "#{user}") 
    private User user; 

    private BackendEvent backendEvent; 

validate(); 
login(); 

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


    public User getUser() { 
     return this.user; 
    } 

이제 백엔드에서 메시지가 모든 사용자 정보가 포함받을 것이다 :

private void handleLoginTell(LoginTell loginTell) { 
    logger.addToLog("handle LoginTell"); 
    user.setSessionId(loginTell.getSessionId()); 
    user.setName(loginTell.getLogin()); 
    user.setLogged(true); 
} 

사용자 클래스는 게터/세터 방법과 그냥 간단한 클래스입니다 세 개의 필드 : username과 password 그리고 sessionid.


두 명의 사용자가 내 사이트를 방문하면 각 사용자마다 내 세션 복제 빈의 새 인스턴스가 생성 될 것입니다. 하지만 .. 여기 내 사용자는 단지 하나의 빈을 공유하는 것 같습니다. 하지만 왜? 내 잘못이 어디 있는지 설명해 주시겠습니까?

감사 조니

답변

0

문제 user 변수 분명히 범위이다는 - 그래서 어떻게 문맥에 등록되어? 더 중요한 것은, 범위는 무엇입니까? 문제의 원인을 찾아야합니다.

명확한 설명

: 나는 당신의 문제는 여기를 참조하십시오

#{user} 무엇
@ManagedProperty(value = "#{user}") 
private User user; 

? 정의 된 위치는 어디입니까? 해당 이름으로 관리 Bean이 있어야하며, 다른 방법으로 컨텍스트에 추가되어야합니다. 문제는 응용 프로그램 범위가있는 것 같습니다. 컨텍스트 변수는 세션 범위가 아닌 모든 종류의 범위를 가질 수 있습니다.