You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Borko Djurovic <dj...@gmail.com> on 2012/09/25 13:42:35 UTC
Ordering problem
Hi, i have problem with ordering medicines in my app. I have custom component
that displays informations about medicine and provides text field for
entering quantity value. The Code is (Order.java):
public class Order {
@Parameter(required = true)
private Cart cart;
@Parameter(required = true)
private Zone cartZone;
@Parameter(required = true)
@Property
private MedicineOrder medicineOrder;
public Object onSuccessFromMedicineOrderForm() {
cart.addMedicineOrder(medicineOrder);
return (Object)cartZone;
}
}
the Order.tml is:
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd"
xmlns:p="tapestry:parameter">
<t:form t:id="medicineOrderForm">
<t:errors/>
*Medicine name: *
${medicineOrder.medicine.name}
*Medicine description: *
${medicineOrder.medicine.description}
*Medicine milligrams: *
${medicineOrder.medicine.milligrams}
*Medicine price: *
${medicineOrder.medicine.price}
*<t:label for="qty" />*
<t:textfield t:id="qty" value="medicineOrder.qty"
validation="required"/>
<t:submit value="literal:Add to cart" />
</t:form>
</html>
I use this component for each medicine order in Order Medicine page. Order
medicine page:
public class OrderMedicines {
@SuppressWarnings("unused")
@Inject
private Messages messages;
@InjectComponent
private Zone medicinesZone;
@SuppressWarnings("unused")
@InjectComponent
@Property
private Zone cartZone;
@SuppressWarnings("unused")
@Component
private com.borko.healthcare.tapestry.components.Order orderComponent;
@SuppressWarnings("unused")
@Property
private MedicineOrder cartMedicineOrder;
@Property
@Persist
private Cart cart;
@Inject
private ApplicationContext applicationContext;
private SupplierManager supplierManager;
@Property
@Persist
private String supplierDescriptor;
@SuppressWarnings("unused")
@Property
@Persist(PersistenceConstants.FLASH)
private MedicineOrder medicineOrder;
@Persist
private List<MedicineOrder> medicineOrders;
@Persist
private Map<Integer, List<MedicineOrder>> cashe;
@SuppressWarnings("unused")
@Persist
private Order order;
private int counter;
@SetupRender
public void initialize() {
if (cashe == null) {
cashe = new HashMap<Integer, List<MedicineOrder>>();
}
if (cart == null) {
cart = new CartBean();
}
counter = 0;
}
public List<MedicineOrder> getCartMedicineOrders() {
return cart.getMedicineOrders();
}
public Object onValueChangedFromSupplierDescriptor(String
supplierDescriptor) {
int id = Integer.parseInt(supplierDescriptor);
if (id < 0) {
return null;
}
if (cashe.get(id) == null) {
supplierManager = (SupplierManager)
applicationContext.getBean("supplierManager");
Supplier supplier = supplierManager.getSupplier(id);
List<Medicine> medicines = supplier.getMedicines();
medicineOrders = new ArrayList<MedicineOrder>();
for (Medicine medicine : medicines) {
MedicineOrder medicineOrder = new MedicineOrderBean();
medicineOrder.setMedicine(medicine);
medicineOrder.getMedicine().setSupplier(supplier);
medicineOrders.add(medicineOrder);
}
cashe.put(id, medicineOrders);
} else {
medicineOrders = cashe.get(id);
}
return medicinesZone.getBody();
}
public List<MedicineOrder> getMedicineOrders() {
if (cashe.get(Integer.parseInt(supplierDescriptor)) != null) {
return cashe.get(Integer.parseInt(supplierDescriptor));
}
return medicineOrders;
}
/**
* Used for populating select component with items
* @return formated string output. Example: "1=Jovica Jovic, 2=Perica
Peric".
*/
public String getSuppliers() {
supplierManager = (SupplierManager)
applicationContext.getBean("supplierManager");
List<Supplier> suppliers = supplierManager.list();
StringBuffer buffer = new StringBuffer();
buffer.append("-1=Please select supplier,");
for (Supplier supplier : suppliers) {
buffer.append(supplier.getId() + "=");
buffer.append(supplier.getUserDetails().getFullName() + ",");
}
String outputString = buffer.toString();
if (suppliers.size() > 0) {
outputString = outputString.substring(0, outputString.length() - 2);
}
return outputString;
}
public MedicineOrder getNextMedicineOrder() {
System.out.println(counter);
MedicineOrder medicineOrder = getMedicineOrders().get(counter++);
if (counter >= getMedicineOrders().size()) {
counter = 0;
}
return medicineOrder;
}
}
and OrderMedicines.tml:
<html t:type="layout"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"
xmlns:p="tapestry:parameter">
Order medicines page
<p>Select supplier to view all available medicines that supplier has
to offer.</p>
<t:form>
<t:errors/>
Cart:
<t:zone t:id="cartZone" id="cartZone">
<t:grid row="cartMedicineOrder"
source="cartMedicineOrders"
add="medicineName, medicineDescription, medicineMilligrams,
medicinePrice"
exclude="id"
reorder="orderNumber, medicineName, medicineDescription,
medicineMilligrams, medicinePrice, qty">
<p:medicinenamecell>${cartMedicineOrder.medicine.name}</p:medicinenamecell>
<p:medicinedescriptioncell>${cartMedicineOrder.medicine.description}</p:medicinedescriptioncell>
<p:medicinemilligramscell>${cartMedicineOrder.medicine.milligrams}</p:medicinemilligramscell>
<p:medicinepricecell>${cartMedicineOrder.medicine.price}</p:medicinepricecell>
</t:grid>
<p>*Total price: ${cart.totalPrice}*</p>
</t:zone>
<t:submit value="literal:Send orders"/>
Ordering:
<t:select t:id="supplierDescriptor" model="${suppliers}"
validate="required" zone="medicinesZone" />
</t:form>
<t:zone t:id="medicinesZone" id="medicinesZone">
<t:if test="supplierDescriptor">
<t:loop source="medicineOrders" value="medicineOrder">
<t:order t:id="orderComponent"
cart="cart"
cartZone="cartZone"
medicineOrder="nextMedicineOrder" />
</t:loop>
</t:if>
</t:zone>
</html>
The problem is that when I try to add to cart some medicineOrder the
application adds only first one in the list. When I change quantity value in
lets say sacond medicineOrder the changes is applied for the firs one. I
don't know what is problem.
I had this code:
<t:zone t:id="medicinesZone" id="medicinesZone">
<t:if test="supplierDescriptor">
<t:loop source="medicineOrders" value="medicineOrder">
<t:order t:id="orderComponent"
cart="cart"
cartZone="cartZone"
medicineOrder="medicineOrder" />
</t:loop>
</t:if>
</t:zone>
but got same problem.
--
View this message in context: http://tapestry.1045711.n5.nabble.com/Ordering-problem-tp5716481.html
Sent from the Tapestry - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: Ordering problem
Posted by Lance Java <la...@googlemail.com>.
You will need to store your cart somewhere between requests. Either in the
session or on the client via a cookie. Most likely, it will be a global
session object and you will declare it as:
@SessionState(create=?)
private Cart cart;
http://tapestry.apache.org/session-storage.html
--
View this message in context: http://tapestry.1045711.n5.nabble.com/Ordering-problem-tp5716481p5716496.html
Sent from the Tapestry - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org