2012-01-10 4 views
1

나는이 내 프로젝트에서 다음과 같은 문제 : 우리는이 관리하는 다음과 같은 구성 콩이JSF SessionScoped ManagedBean은

:이 코드의 전부는 아닙니다

@ManagedBean 
@SessionScoped 
public class SessionBean { 
    private PersonnelFile personnelFile; // + getters/setters 
} 

@ManagedBean 
@ViewScoped 
public class ViewBean { 
    @ManagedProperty("#{sessionBean}") 
    private SessionBean sessionBean; 

    public void selectPersonnel() { 
     sessionBean.getPersonnelFile().setPerson(new Person()); 
    } 
} 

을하지만, 그것은 당신에게 sitatution의 일반적인 아이디어를 제공합니다 :

    세션 객체를
  • 우열을 보유하고
  • SessionScoped 콩 보기 관련 개체와 SessionScoped 빈에 대한 참조를 보유하고 wScoped 콩

문제는 지금 : 내보기에 액세스

  • 내가 같은보기로 몇 후 백업을 매번 다시보기로 돌아온다 .. 지금까지 너무 좋아.
  • 특정 순간에, 나는 세션의 객체를 SessionScoped 빈에서 뷰의 정보로 설정하고, 나는 내 견해를 떠났다. ... 지금까지 그렇게 좋은
  • 이제 내가 돌아 오면 (예상대로) 새 ViewScoped bean 인스턴스를 만들고 (ManagedProperty 주석으로 인해) SessionScoped 빈을 다시 설정합니다.
  • 이것을 디버깅 할 때 SessionScoped bean에 대한 참조가 동일하게 유지된다는 것을 알 수 있습니다. 그가,
  • 나는 SessionScoped 콩이 개체를 다시 결코 개체에 대한 세션 정보를 '손실'나는 돈 때문에 의미 그러나 같은 객체
  • , 내가 이전에 null를되고있다 SessionScoped 빈에서 설정 한 객체의 그것이 잘못되었을 수있는 곳을 보지 마라.

만일 당신이 더 많은 설명을 원한다면 이 질문을 나에게 더 잘 표현하고 싶거나, 편집 버튼을 사용하거나 알려주 길 바란다.

+1

* * "나는 SessionScoped 콩에서이 객체를 초기화하지"...

그래서, 내 문제가 해결되지만, 솔루션에 이상적입니다 있는지 확실하지 않습니다. 분명히 속성을 변경 한 코드가 있어야합니다. 마법은 없습니다. 지금까지 제공된 정보를 통해 우리는 잠재적 인 원인을 지적 할 수 없습니다. 디버거의'private person person;'줄에 가변 시계 중단 점을 넣어야합니다.그런 다음 스택을 변경하려는 스택을 검사 할 수 있습니다. – BalusC

+0

우리가 문제를 발견했을 수도 있습니다. 우리의 web.xml에서 우리는 다음과 같은 설정을 사용했다 : '<상황 PARAM> javax.faces.STATE_SAVING_METHOD 서버 ' –

+0

흠, JSF impl/version 정확히 사용하고 있습니까? – BalusC

답변

0

@BalusC Google에서이 문제를 발견했을 수도 있습니다. 내가 제대로 이해한다면, 우리는이 설정 뷰 범위의 빈을 통해 세션 범위 빈의 상태를 편집 할 수 없습니다, 지금

<context-param> 
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
    <param-value>client</param-value> 
</context-param> 

: 우리의 web.xml에서 우리는 다음과 같은 설정을 사용했다 ... 우리가 session-scope bean의 상태를 바꿀 수 있었던 유일한 방법은 bean 자체의 생성자 또는 PostConstruct 메소드에있다. 뷰 범위 Bean 내부에서 세션 범위 bean에 대한 변경 사항은 서버에서 유지되지 않았습니다.

이 변수를 '서버'로 설정하면 실제로 상태가 서버에 유지되고 매번 클라이언트에 전송되지 않습니다. 메모리의 측면에서 서버에 더 많은 부하가 걸리는 것을 알고 있지만 client 접근 방식을 사용하여 문제를 해결할 수있는 방법을 알고 싶습니다.

관련 문제