Eingabefeld in <h: dataTable> erhält immer den Wert des letzten Elements in Liste
Ich habe ein<h:dataTable>
Anzeigen eines Produktkatalogs inProudcts.xhtml
:
<h:form name="ViewProductsManagedBean">
<h:dataTable var="product" value="#{ViewProductsManagedBean.productsList}">
<h:column>
<h:outputText value="#{product.productid}" />
</h:column>
<h:column>
<h:outputText value="#{product.itemcode}" />
</h:column>
<h:column>
<h:outputText value="#{product.itemdescription}" />
</h:column>
<h:column>
<h:outputText value="#{product.unitprice}" />
</h:column>
<h:column>
<h:selectOneMenu value="#{ViewProductsManagedBean.quantityPurchased}" required="true">
<f:selectItem itemValue="1" itemLabel="1" />
<f:selectItem itemValue="2" itemLabel="2" />
<f:selectItem itemValue="3" itemLabel="3" />
<f:selectItem itemValue="4" itemLabel="4" />
<f:selectItem itemValue="5" itemLabel="5"/>
</h:selectOneMenu>
</h:column>
<h:column>
<h:commandButton action="#{ViewProductsManagedBean.addItemToCart(product)}" value="Add to basket" />
</h:column>
</h:dataTable>
</h:form>
Mit dieser verwalteten Bean:
@ManagedBean(name="ViewProductsManagedBean")
@SessionScoped
public class ViewProductsManagedBean {
private double unitprice;
private String itemdescription;
private String itemcode;
private int quantityPurchased;
private String result;
@EJB
ProductLocal productFacadeBean;
@EJB
CartFacade cartFunctions;
private List<ProductEntity> productsList = new ArrayList<>();
private List<StockEntity> stocksList = new ArrayList<>();
private ProductEntity product;
@PostConstruct
private void init(){
setProductsList();
product = new ProductEntity();
}
public void addItemToCart(ProductEntity product) {
int quantity=this.quantityPurchased;
cartFunctions.addItemToCart(product, quantity);
System.out.println(product.toString());
}
// getters+setters
}
Das Problem ist mit dem<h:selectOneMenu>
, um die Menge auszuwählen. Unabhängig davon, welcher Wert ausgewählt ist, erhält die verwaltete Bean immer den Wert 1 für die Menge. AUSGENOMMEN, wenn die Menge im letzten Artikel des Produktkatalogs geändert wird. In diesem Fall ändert sich die Menge für ALLE Artikel auf den für ausgewählten Wert Der letzte Artikel im Katalog und die richtige Menge werden an die verwaltete Bean gesendet.
Wie wird das verursacht und wie kann ich das beheben?