Я довольно новичок в Java EE, и я создаю простой интернет-магазин, используя веб-приложение maven. У меня проблема с моей сессионной сессией. Я искал сеть и пробовал разные решения (большинство из них использовало сервлеты), но, похоже, это не работает.Обновления с учетом состояния сеанса (?) On buttonclick
В любом случае, моя проблема заключается в том, что я пытаюсь использовать свой сеансовый компонент, чтобы отслеживать, что находится в корзине покупок. Я использую arrayList для хранения элементов. Однако, когда я добавляю новый элемент, он просто заменяет старый элемент, а не добавляет его в список. Я предполагаю, что компонент сеанса каким-то образом обновляется или создается новый экземпляр, но я просто не могу найти никакого решения или информации об этом.
сессионного компонента
@Stateful
@LocalBean
public class CartSessionBean{
private List contents;
public CartSessionBean(){
contents= new ArrayList();
}
public List getContents() {
return contents;
}
public void addProduct(String title) {
contents.add(title);
}
}
Управляемый Bean
@ManagedBean
@RequestScoped
public class ProductController {
private List cartList = new ArrayList();
private int nrOfCartItems=0;
@EJB private CartSessionBean cart;
public String doAddCart(String title)
{
cart.addProduct(title);
setCartList(cart.getContents());
setNrOfCartItems(cart.getContents().size());
return "products.xhtml";
}
}
Facelet
<h:form>
<p>
your cart contains <h:outputLabel class="" value="#{productController.nrOfCartItems}" /> items.
<ui:repeat value="#{productController.cartList}" var="cart">
<h:outputLabel value="#{cart}" />
</ui:repeat>
<h:commandButton value="go to checkout"/>
</p>
</h:form>
<h:form>
<h:dataTable value="#{productController.productList}" var="pr" border="0">
<h:column>
<h:graphicImage value="images/#{pr.picture}" />
</h:column>
<h:column>
<h2><h:outputText value="#{pr.product_name}"/></h2>
<p> in stock: <h:outputText value="#{pr.stock}"/><br/>
price: <h:outputText value="#{pr.price}"/> SEK<br/><br/>
<h:outputText value="#{pr.description}"/><br/></p>
<h:commandButton value="add to cart" action="#{productController.doAddCart(pr.product_name)}"/>
</h:column>
</h:dataTable>
</h:form>
О, ладно. Спасибо вам за помощь. Как вы это делаете? Было бы здорово, если бы вы могли хотя бы направить меня в правильном направлении, потому что я чувствую себя совершенно потерянным, пытаясь найти этот онлайн. –
Просто измените свой управляемый компонент (ProductController) с RequestScoped на SessionScoped и вот он :-) –
Просто хотел сказать спасибо. Это решило мою проблему :) –