2011-11-16 2 views
6

다른 부분으로 구성된 사용자가 선택한 구성을 저장하는 방법이 필요합니다. 각 파트는 관리 빈 (managed bean)이 제공하는 목록 (부품 유형당 하나)과 별도의 페이지에서 선택됩니다.세션 범위 관리 빈 대 스테이 폴 빈 대 httpsession

이제 재미있는 부분입니다. 나는 위의 모든 페이지에 대해 템플릿에 <ui:include>으로 삽입 한 모든 페이지에서 항상 동일한 데이터 테이블을 볼 수 있습니다. 이 데이터 테이블에 사용자가 선택한 부품의 선택 사항이나 변경 사항을 반영해야합니다. db와 같은 구성을 저장하는 것이 좋겠지 만 지금은 내 우선 순위가 아닙니다. 장바구니 유형이지만 다른 사용자가 없습니다 (프로토 타입 일뿐입니다). 로그인이 필요 없습니다.

이것은 javaee, jsf, ejb와 처음 만났을 때 어떤 것이 가장 좋은 방법인지 모르겠습니다. 나는 다른 옵션에 대해 읽었으며 어떤 방법이든 작동 할 것이라고 생각합니다. 그래서 뭔가를 놓칠 수 있습니다.

나는 올바른 방향으로 나를 가리키는 누군가 주셔서 감사하겠습니다.

답변

11

세션 범위 관리 빈을 사용하여 장바구니 정보를 보유 할 수 있습니다. 여기에 기본 킥오프 예입니다 (제품 설명되지 수량을 복제, 그것은 전체적인 아이디어를주고 그냥) :

@ManagedBean 
@SessionScoped 
public class Cart { 

    private List<Product> products = new ArrayList<Product>(); 

    public void add(Product product) { 
     products.add(product); 
    } 

    public void remove(Product product) { 
     products.remove(product); 
    } 

    public List<Product> getProducts() { 
     return products; 
    } 

} 

당신은 수 (당신이 Map<Product, Integer> 또는 Map<Product, Order>이 양을 추적하는 데 사용할 수 있습니다) 다음과 같이

<h:dataTable value="#{cart.products}" var="product"> 
    <h:column>#{product.description}</h:column> 
    <h:column><h:commandButton value="Remove" action="#{cart.remove(product)}" /></h:column> 
</h:dataTable> 

당신은 다른 테이블에서 장바구니에 제품을 추가 할 수 있습니다 :

를 다음과 같이 카트를 표시 0
<h:dataTable value="#{products.list}" var="product"> 
    <h:column>#{product.description}</h:column> 
    <h:column><h:commandButton value="Add" action="#{cart.add(product)}" /></h:column> 
</h:dataTable> 

stateful EJB는 다른 API/프레임 워크 또는 원격 클라이언트에서 웹 응용 프로그램의 다른 위치에서 사용할 수 있기를 원하거나 영속성 컨텍스트를 사용하여 항목을 잠그려고 할 때만 유용합니다 현재 카트에 있으므로 다른 고객이 장바구니에 추가 할 수 없습니다. HttpSession은 JSF가 세션 범위의 관리 빈을 어쨌든 저장하기 때문에 JSF의 커버 아래에서 원시 Servlet API를 외부로 노출하고 싶지 않으므로 관련이 없습니다.

+1

감사합니다. 당신이 내 질문 중 하나에 대답 할 때마다 거의 크리스마스와 같습니다. – glasspill

+0

당신을 진심으로 환영합니다. – BalusC

+0

그리고 '클래스'javax.faces.component.html.HtmlDataTable '에'description '속성이 없으면 다른 클래스에 같은 이름을 사용했을 가능성이 있으므로'var'의 이름을 변경하십시오. 다른 곳에서는 현재와 충돌합니다. 원인을 찾느 라 오래 보낼 것입니다. – glasspill

관련 문제