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&lt;MedicineOrder>> cashe;
	
	@SuppressWarnings("unused")
	@Persist
	private Order order;
	
	private int counter;
	
	@SetupRender
	public void initialize() {
		if (cashe == null) {
			cashe = new HashMap<Integer, List&lt;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