1
我對Java EE相當陌生,我正在使用maven web應用程序構建一個簡單的webshop。我的狀態會話Bean有問題。我一直在尋找網絡,並嘗試了不同的解決方案(其中大部分是使用servlet),但似乎並不奏效。Stateful Session Bean在按鈕上更新(?)
無論如何,我的問題是我試圖使用我的會話bean來跟蹤購物車中的內容。我正在使用arrayList來存儲項目。但是,當我添加一個新項目時,它只是替換舊項目,而不是將其添加到列表中。我猜想session bean會以某種方式更新或創建它的一個新實例,但我似乎無法找到任何有關此的溶劑或信息。
有狀態會話Bean
@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>
噢好吧。感謝您的幫助。儘管如此,你怎麼去做。如果你至少能夠把我引向正確的方向,那將是非常好的,因爲我完全失去了嘗試在網上搜索這個東西的感覺。 –
只需將您的託管Bean(ProductController)從RequestScoped更改爲SessionScoped,就是這樣:-) –
只是想說謝謝。這解決了我的問題:) –