model类
@SuppressWarnings("serial")
@Entity
public class ShoppingCart implements Serializable{
private int id;
private ProductInfo product;
private ProductStyle style;
private String user;
private int count=1;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
return result;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public ShoppingCart(){}
public ShoppingCart(ProductInfo product, ProductStyle style) {
super();
this.product = product;
this.style = style;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ShoppingCart other = (ShoppingCart) obj;
if (id != other.id)
return false;
return true;
}
@Id@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@ManyToOne(cascade=CascadeType.REFRESH,optional=false)
@JoinColumn(name="productid")
public ProductInfo getProduct() {
return product;
}
public void setProduct(ProductInfo product) {
this.product = product;
}
@ManyToOne(cascade=CascadeType.REFRESH,optional=false)
@JoinColumn(name="styleid")
public ProductStyle getStyle() {
return style;
}
public void setStyle(ProductStyle style) {
this.style = style;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
}
Action类
public class CartAction extends ActionSupport implements ModelDriven{

private CartFrom cf = new CartFrom();
private ProductManager pm;
private List<ShoppingCart> items = new ArrayList<ShoppingCart>();

public String exec() {
StringBuffer hql = new StringBuffer();
//where product.id=cf.getid and style.id=cf.getid
hql.append("o.product.id=? and o.style.id=? and o.user=?");
Object[] param = new Object[]{cf.getProductid(),cf.getStyleid(),cf.getUser()};
QueryResult<ShoppingCart> qr = pm.getScrollData(ShoppingCart.class,-1,-1, hql.toString(), param);
if (qr.getGetResult().size()>0) {
ShoppingCart car = (ShoppingCart) qr.getGetResult().get(0);
car.setCount(car.getCount()+1);
pm.update(car);
} else {
ShoppingCart cart = new ShoppingCart(new ProductInfo(cf.getProductid()),new ProductStyle(cf.getStyleid()));
cart.setUser(cf.getUser());
pm.save(cart);
pm.refresh(cart);
}
items =  pm.getScrollData(ShoppingCart.class,-1,-1,"o.user=?", new Object[]{cf.getUser()}).getGetResult();
for(ShoppingCart sc : items) {
System.out.println(sc.getProduct().getName());
System.out.println(sc.getCount());
}
return "exec";
} public List<ShoppingCart> getItems() {
return items;
} public void setItems(List<ShoppingCart> items) {
this.items = items;
} public CartFrom getCf() {
return cf;
}
public Object getModel() {
return cf;
} public ProductManager getPm() {
return pm;
}
public void setCf(CartFrom cf) {
this.cf = cf;
} @Resource(name="productManager")
public void setPm(ProductManager pm) {
this.pm = pm;
}
}jsp
<s:iterator value="items">
<s:property value="product.name" />
<s:property value="count" />
</s:iterator>刚存入一条记录然后取出来是空的,要第二次拿才可以拿到它他的名字

解决方案 »

  1.   

    应该是因为action中只有保存数据的逻辑,没有把保存后的数据返回到页面上。
    用request把数据返回给页面。
    比如:
    Map request = (Map) ActionContext.getContext().get("request");
    request.put("items", items);
      

  2.   

    我解决了这样改就好了
       ProductInfo product = pm.find(ProductInfo.class, cf.getProductid());
       ProductStyle style =pm.find(ProductStyle.class,cf.getStyleid());
       ShoppingCart cart = new ShoppingCart(product,style);
       cart.setUser(cf.getUser());
       pm.save(cart);
    给各位加分结贴哈哈