Cześć,
Uczę się JSF i mam pewien problem, którego nie mogę namierzyć.
W formularzu tworzę nowe produkty. Po kliknięciu w command button wywołuje się metoda która ma dodać ten produkt do listy. Lista ta znajduje się w singletonowym komponencie.
Problem polega na tym, że gdy dodaję jakiś obiekt to on zastępuję wszystkie inne obiekty w liście. Np. mam w liście obiekty: "Komputer", "Tv" i dodaję nowy obiekt "Książka" i teraz w liście mam: "Książka","Książka","Książka".
Mój prosty kontroller:
@Named
public class AdminController {
@Inject
private ProductService productService;
public void createProduct(Product product) {
productService.createProduct(product);
}
}
Serwis:
@Named
@SessionScoped
public class ProductService implements Serializable {
private static final long serialVersionUID = -2542942450639054245L;
@Inject
private Warehouse warehouse;
@Named
@Produces
public List<Product> getProductList() {
return warehouse.getProductList();
}
public void createProduct(Product product) {
warehouse.addProduct(product);
}
}
Singletonowy magazyn:
@Singleton
@Startup
public class Warehouse {
private List<Product> productList;
@PostConstruct
public void init() {
productList = new LinkedList<Product>();
}
@Lock(LockType.READ)
public List<Product> getProductList() {
return productList;
}
@Lock(LockType.WRITE)
public void addProduct(Product product) {
productList.add(product);
}
}
I klasa reprezentująca produkt.
@Named
@RequestScoped
public class Product {
private int id;
private String name;
private double price;
private boolean enabled;
//geters and seters
}