基于Tapestry4
源代码在线查看: buyfruit.java
package com.tapestry4;
import java.util.ArrayList;
import java.util.List;
import org.apache.tapestry.IPage;
import org.apache.tapestry.annotations.InjectPage;
import org.apache.tapestry.annotations.InjectState;
import org.apache.tapestry.annotations.Persist;
import org.apache.tapestry.html.BasePage;
import org.apache.tapestry.valid.ValidationDelegate;
public abstract class BuyFruit extends BasePage {
/**
* 这是T4的新特性,它声明了一个变量需要被持久化。有两种持久化方式:
* 第一:保存到session中,以@Persist("session")方式声明;
* 第二:保存到客户端,以@Persist("client")方式声明;这里的功效类似在页面上使用hidden
* 来保存变量。只是hidden需要在form中才可以使用,而这种方式,Tapestry会自动在页面上保存
* 变量(将该变量添加到页面上的所有URL链接组件参数中)。这样在进行页面跳转时,可以很方便地 getProductId()获取到变量值。
*
* @return
*/
@Persist("client")
public abstract Integer getFruitId();
public abstract void setFruitId(Integer ig);
private int buyMount;
/**
* 如果这里不使用annotation声明,而是在page中声明:
*
* @return
*/
@InjectState("visit")
public abstract MyVisit getMyVisit();
@InjectPage("Cart")
public abstract IPage getCartPage();
@Override
protected void initialize() {
buyMount = 0;
}
// 获取水果详细信息
public Fruit getFruitDetail() {
return Products.findFruitById(this.getFruitId());
}
// 购买水果
public IPage buyFruitSubmit() {
ValidationDelegate delegate = (ValidationDelegate)this.getBeans().getBean("delegate");
if(delegate.getHasErrors()) {
return this;
}
FruitCart fc = new FruitCart();
Fruit f = Products.findFruitById(this.getFruitId());
fc.setBuyFruit(f);
fc.setBuyMount(this.getBuyMount());
fc.setPayMoney(f.getPrice() * this.getBuyMount());
// MyVisit visit = (MyVisit)this.getVisit();
List list = this.getMyVisit().getFruitCartList();
if(list == null) {
list = new ArrayList();
}
list.add(fc);
this.getMyVisit().setFruitCartList(list);
return getCartPage();
}
// 重新选择水果
public String backShopSubmit() {
return "Shop";
}
public int getBuyMount() {
return buyMount;
}
public void setBuyMount(int buyMount) {
this.buyMount = buyMount;
}
}