복붙노트

[SPRING] Bean 속성은 다른 세션에서 공유됩니다.

SPRING

Bean 속성은 다른 세션에서 공유됩니다.

내 응용 프로그램에 JSF Mojarra 2.1.13, PrimeFaces 3.5 및 Spring 3.2.3을 사용하고 있습니다. DI의 경우 Spring 접근 방식을 사용하고 있습니다 (CDI 아님). 콜렉터와 함께 PrimeFaces 데모에 대한 자습서를 따르고 있습니다. http://www.primefaces.org/showcase/ui/collector.jsf

모든 것이 잘 작동하고 목록에 값을 추가하고 가져올 수 있습니다. 문제는 예를 들어. 두 개의 브라우저를 열고 목록에 값을 추가하면 다른 브라우저에서 몇 가지 값을 추가하고 브라우저를 새로 고치면 두 브라우저에 입력 된 모든 값을 볼 수 있습니다. 따라서 한 브라우저에서 두 값을 두 개 입력하면 새로 고친 후 두 브라우저에서 모두 네 개의 값이 표시됩니다. 내 값을 다른 세션에서 공유하지 않기를 바랍니다.

내 bean은 다음과 같이 보입니다 :

@Component
@ManagedBean
public class ClientBean extends BaseBean {

    private Client client = new Client();

    private List<Client> clients = new LinkedList<>();

    public String reInit() {
        client = new Client();
        return null;
    }

    public Client getClient() {
        return client;
    }

    public void setClient(Client client) {
        this.client = client;
    }

    public List<Client> getClients() {
        return clients;
    }

    public void setClients(List<Client> clients) {
        this.clients = clients;
    }
}

나는 전역 변수를 만들고 있음을 알고있다.

private Client client = new Client();    
private List<Client> clients = new LinkedList<>();

그러나 이것은 자습서에 나와 있습니다. 그렇다면 이러한 상황을 처리하여 컬렉터 작업을 통해 변수가 다른 세션에서 공유되지 않게하려면 어떻게해야합니까?

편집하다 @RequestScoped 또는 @SessionScoped를 사용하여 콩에 주석을 달았습니다. 작동하지 않았습니다. 같은 문제가 남아 있습니다.

해결법

  1. ==============================

    1.왜 @ManagedBean을 @Component로 시작하도록 구성했는지 확실하지 않습니다. 이 문제는 Spring이 애플리케이션 전반에 걸쳐 @Component의 단일 인스턴스를 처리하기 때문에 발생합니다 (또는 최소한 사용자의 설명에서 보이는 것처럼). 이를 제거하고 관리 Bean에서 @ViewScoped를 사용하여이 작업을 예상대로 수행하십시오. Spring을 사용하여 JSF 관리 Bean을 관리한다면,이 구성을 faces-config.xml에 추가해야한다 (mkyong 튜토리얼).

    왜 @ManagedBean을 @Component로 시작하도록 구성했는지 확실하지 않습니다. 이 문제는 Spring이 애플리케이션 전반에 걸쳐 @Component의 단일 인스턴스를 처리하기 때문에 발생합니다 (또는 최소한 사용자의 설명에서 보이는 것처럼). 이를 제거하고 관리 Bean에서 @ViewScoped를 사용하여이 작업을 예상대로 수행하십시오. Spring을 사용하여 JSF 관리 Bean을 관리한다면,이 구성을 faces-config.xml에 추가해야한다 (mkyong 튜토리얼).

    <application>
        <el-resolver>
            org.springframework.web.jsf.el.SpringBeanFacesELResolver
        </el-resolver>
    </application>
    

    하지만 이렇게하면 @ViewScoped 관리 빈의 힘이 손실됩니다. 이 오류를 해결하려면 @ViewScoped를 Spring에 구현해야한다. 이것에 관해 그물에 대한 많은 예제들이 있으며, 가장 인기있는 것은 Cagatay 's

    JSF 관리 빈 범위에 대한 추가 정보 : JSF 2의 통신 : 관리되는 빈 범위

  2. from https://stackoverflow.com/questions/17278376/bean-properties-are-shared-across-different-sessions by cc-by-sa and MIT license