2011-11-16 8 views
6

Potrzebuję sposobu na zapisanie wybranej przez użytkownika konfiguracji składającej się z różnych części. każda część jest wybierana na oddzielnej stronie, z listy dostarczonej przez zarządzaną fasolę (jedna na każdy typ części).Sesja o ustalonej skali i fasola stanowa vs httpsession

teraz część zabawna. Mam datatable, zawsze widoczny, taki sam dla wszystkich stron, które wstawiłem z <ui:include> w szablonie dla wszystkich wyżej wymienionych stron. Chcę, aby ten datatable odzwierciedlał wybory lub zmiany w wyborze dokonanym przez użytkowników dla części. może również zapisać taką konfigurację do bazy danych, ale teraz nie jest to moim priorytetem. jest to rodzaj koszyka na zakupy, ale nie mam różnych użytkowników (to tylko prototyp), więc nie trzeba logować się.

To jest moje pierwsze spotkanie z javaee, jsf, ejb, nie wiem, które byłoby najlepsze podejście. Czytałem o różnych opcjach i wydaje mi się, że tak czy inaczej zadziała, więc może czegoś brakuje.

Byłbym wdzięczny za wskazanie mi kogoś w dobrym kierunku.

Odpowiedz

11

Do zarządzania informacjami o koszyku można wykorzystać komponent bean zarządzany o zakresie sesji. Oto prosty przykład kickoff (duplikat produkty i ilość nie stanowiło, to tylko dać ogólny pomysł):

@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; 
    } 

} 

(można użyć Map<Product, Integer> lub Map<Product, Order> śledzić ilość)

Mogłabyś następnie wyświetlić wózek następująco:

<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> 

można dodać produkty do koszyka z innej tabeli w następujący sposób:

<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> 

stanową EJB jest tylko interesujące, jeśli chcesz, aby móc go użyć w innym miejscu webapp różnych API/ram lub nawet w odległych klientów, lub gdy chcemy skorzystać z kontekstu utrwalania, aby zablokować elementy obecnie w koszyku, aby inni klienci nie mogli go dodać do koszyka. Numer HttpSession nie jest istotny, ponieważ JSF przechowuje w nim sesje z ziarnami zarządzanymi na sesjach i nie chcesz ujawniać surowego API Servleta z okładek JSF na zewnątrz.

+1

dziękuję youuuuu. prawie za każdym razem, kiedy odpowiadasz na jedno z moich pytań, jest prawie jak w święta – glasspill

+0

Nie ma za co. – BalusC

+0

A jeśli pojawi się błąd taki jak "Klasa" javax.faces.component.html.HtmlDataTable "nie ma właściwości 'description'' zmień nazwy' var', ponieważ prawdopodobnie używasz tej samej nazwy dla innego gdzie indziej jest to sprzeczne z aktualnym i spędzisz całe wieki szukając przyczyny. – glasspill

Powiązane problemy