从后台返回的total是所有商品的总价格,所以在function中,首先我们根据id拿到所有商品小计的元素然后赋值为total即可,totalAll是加了运费的总价,后面那个toFixes(2)表示保留两位小数。然后再拿到单个商品小计的元素,计算一下单个商品的小计,这样前台页面在没有重新载入的情况下,更新了我们想要更新的部分,这就是Ajax强大的地方,这个和前面EasyUI一样的,EasyUI也是Ajax请求。
好了,关于Ajax部分到这里就介绍完了,下面是后台的处理刚刚的请求,是针对自己这个项目的,用来记录项目进度用的。
3. 后台的更新
刚刚Ajax请求的action是SortedAction中的updateSorder()方法,所以我们去SorderAction中完成updateSorder()方法:
@Controller@Scope("prototype")public class SorderAction extends BaseAction<Sorder> {public String addSorder() {//省略无关的代码……//根据商品编号更新商品数量public String updateSorder() {Forder forder = (Forder) session.get("forder");//更新购物项,传进来的product.id被封装到了model中forder = sorderService.updateSorder(model, forder);//计算新的总价格forder.setTotal(forderService.cluTotal(forder));session.put("forder", forder);//以流的形式返回新的总价格inputStream = new ByteArrayInputStream(forder.getTotal().toString().getBytes());return "stream";}}相应的Service中的方法完善如下:
//SorderService接口public interface SorderService extends BaseService<Sorder> {//省去无关的代码……//根据商品id和数量更新商品数量public Forder updateSorder(Sorder sorder, Forder forder);}//SorderServiceImpl实现类@Service("sorderService")public class SorderServiceImpl extends BaseServiceImpl<Sorder> implementsSorderService {//省略无关的代码……@Overridepublic Forder updateSorder(Sorder sorder, Forder forder) {for(Sorder temp : forder.getSorders()) {if(temp.getProduct().getId().equals(sorder.getProduct().getId())) {temp.setNumber(sorder.getNumber());}}return forder;}}最后struts.xml文件中的配置,是把”stream”配在了<global-result>里面,如下
<global-results><!-- 省去其他公共配置 --><result type="stream"><param>inputStream</param></result></global-results>好了,现在Action中计算出的总价格就可以通过流的形式传到前台了,Ajax就可以在它的function中接收到,放到total中了,跟前面的就接上了。
以上所述是小编给大家介绍的妙用Ajax技术局部刷新商品数量和总价实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!