暑假学习22(8.10 周一)

              在今天的工程学习中,我们遇到的问题是在首页面初始化后,我们在登陆过后返回到第一个页面时,出现点击首页,上边的用户名没有的情况。这个问题主要是由于点击首页时直接返回了工程的首页,此时的uvo的值被清空了,所以我们需要添加一个controller,通过这个controller来重刷首页面,但同时要实现之前的uvo的值要对应的传到首页面。但是,之前我们想到的问题是重刷页面使用同一个controller,这样就会遇到首页面原本的controller中的uvo值在登陆一次之后,返回首页退出登陆都无法实现退出的功能,因为用的一个controller会记忆uvo的值传到前台。所以,要想实现退出功能需要在第一个页面新建一个空的uvo,退出后调用时也是没有登陆的页面。

             首页面的图标缺失问题,主要是因为之前没有给对应的商品的类型设置样式表class值,导致对应的图标样式丢失。

int sum=commodityType.size();

for(int i=1;i<=sum;i++){

commodityType.get(i-1).setCount(i+"F");

commodityType.get(i-1).setCss("columnT"+" "+"columnT-"+(i%6+1));

}

model.addAttribute("commodityType",commodityType);

                在首页面每类商品只显示前六项的方法:

public List<GoodsForm> searchGoodsListLimit(GoodsForm frm) {

List<GoodsForm> result = queryDao.executeForObjectList("Goods.selectGoodsListLimit", frm,0,6);//从第一项开始的后六项

return result;

}

            在sql文中的orderby语句使用:

SELECT commodity.commodity_id as commodityId,

commodity.type as type,

stock.stock as stock

FROM commodity, supplier, brand, stock,commodity_type

WHERE commodity.commodity_id = stock.commodity_id

AND commodity.supplier_id = supplier.supplier_id

AND commodity.brand_id = brand.brand_id

AND commodity.type = commodity_type.commodity_type_id

ORDER BY cast(stock.stock as signed) DESC

          注意上边这句话的写法,cast(stock.stock as signed)DESC

          在购物车中初始化页面实现每个商品最初状态的小计结果,并返回到页面上。

List<CartForm> cartFormList=cartService.searchCartList(cartForm);        //选择购物篮内的所有商品

for(int i=0;i<cartFormList.size();i++){

 cartFormList.get(i).setSmallSumPrice(Double.toString(Double.valueOf(cartFormList.get(i).getCount())*Double.valueOf(cartFormList.get(i).getRetailPrice())));                                                  //计算出每一类商品的总价

 }

model.addAttribute("cartList", cartFormList);

        下面的代码实现的功能是:将选中的每一类商品的cartId值得到拼成一个字符串,用于后边的商品账单支付状态的修改,首先需要核对哪些是被选中的商品,通过一个循环,判断其库存是否有,有的话对应的库存减少,然后将cartId的值传入字符串cartId中。

if (check != null) {                        //判断是否被选中

cartForm.setCartId(listBean.get(i).getCartId());            //通过cartForm的cartId的值实现修改库存

boolean result = cartService.editStockByCart(cartForm);       

if (!result) {

throw new SQLException("库存不足!");

}

boolean hisResult = cartService.updateCart(cartForm);            //库存修改结束后,更新购物篮内的内容到cart表

if (!hisResult) {

throw new SQLException("添加支付宝失败");

}

cartIds = cartIds + ",'" + listBean.get(i).getCartId() + "'";              //实现cartIds的多个商品Id的拼接cartForm.setCartId(cartIds.substring(1));                            //截取第一个字符后的内容

       上边的得到的cartId是一个用逗号隔开的字符串,其实是多个商品的cartId,这个在sql文中使用了:

SELECT cart.cart_id as cartId,

cart.guest_id as guestId,

cart.count as count,

commodity.commodity_id as commodityId,

commodity.type as type

FROM cart, commodity, supplier, brand

WHERE cart.commodity_id = commodity.commodity_id

AND commodity.supplier_id = supplier.supplier_id

AND commodity.brand_id = brand.brand_id

AND cart.status = #status#

AND cart.cart_id in($cartId$)

               注意上边的最后一句使用的是一个cartId,这个是一个集合,而这个集合就是之前的cartIds的值。这里和我们之前的模糊查询时候的表达式写的比较像。

               在购物篮页面,我们会对商品的购买数量进行调整,这时我们需要实现一个动态的数量的添加减少,每类商品的小计和最终商品的总价。这个功能的实现是一个javascript的代码,具体如下:

已选择<i id="sumCount" class="yh">0</i>种商品 合计¥<i id="sumMoney" class="yh">0</i>元

<span name="xiaoji" th:id="${#strings.concat('sum').concat(cartsInfo.commodityId)}" th:text="${cartsInfo.smallSumPrice}"></span>元

<a href="javascript:void(0);"  th:οnclick="${#strings.concat('subNum(').concat(cartsInfo.commodityId).concat(')')}"></a>       //注意到这里使用的href=“javascript:void(0)”,作用是为了使这个链接不执行跳转功能,只执行点击事件。

<input th:id="${cartsInfo.commodityId}" type="text" class="fl inp-t" th:name="${#strings.concat('listBean[').concat(status.index).concat('].countArray')}" th:value="${cartsInfo.count}" value="1" />

<a href="javascript:void(0);"  th:οnclick="${#strings.concat('addNum(').concat(cartsInfo.commodityId).concat(')')}"></a>

单价:<span th:id="${#strings.concat('single').concat(cartsInfo.commodityId)}" th:text="${cartsInfo.retailPrice}"></span>元

规格:每<span    th:text="${#strings.concat(cartsInfo.unit).concat(cartsInfo.specifications)}"></span>

<input type="checkbox" th:name="${#strings.concat('listBean[').concat(status.index).concat('].checkArray')}" οnclick="check();"/></td>                                   //复选框的选定onclick事件

<input type="hidden" th:name="${#strings.concat('listBean[').concat(status.index).concat('].cartId')}" th:value="${cartsInfo.cartId}"/>,                        //这里隐藏的是每一项cartId的值,注意这里不能实现一个数据类型的隐藏,只能是字符串。

<input type="checkbox" id="checkAllId" οnclick="checkAll(this);" class="vm" /> 全选

(与javascript相关的html代码)下面的javascript的代码:

function addNum(inputId) {

document.getElementById(inputId).value = parseInt(document

.getElementById(inputId).value) + 1;

document.getElementById("sum" + inputId).innerText = document.getElementById("single" + inputId).innerText * document.getElementById(inputId).value;//这里实现了小计的计算,<span>的值是innerText来取得,input中的值是value来得到的

}

function subNum(inputId) {

if (document.getElementById(inputId).value == "1") {

return;

}

document.getElementById(inputId).value = parseInt(document

.getElementById(inputId).value) - 1;

document.getElementById("sum" + inputId).innerText = document.getElementById("single" + inputId).innerText * document.getElementById(inputId).value;

}

function checkAll(obj) {

var el = document.getElementsByTagName('input');

if(obj.checked == true) {

var sumXiaoji = 0;

var sumCount = 0;

var xiaojiLen = document.getElementsByName("xiaoji");

for(var xiaoji in xiaojiLen) {

if (xiaojiLen[xiaoji].tagName == 'SPAN') {

sumXiaoji = sumXiaoji + parseFloat(xiaojiLen[xiaoji].innerText);

sumCount = sumCount + 1;

}

}

document.getElementById("sumCount").innerText = sumCount;

document.getElementById("sumMoney").innerText = sumXiaoji;

for (var key in el) {

if (el[key].type == 'checkbox') {

el[key].checked = true;

}

}

} else {

document.getElementById("sumCount").innerText = 0;

document.getElementById("sumMoney").innerText = 0;

for (var key in el) {

if (el[key].type == 'checkbox') {

el[key].checked = false;

}

}

}

}

function check() {

var el = document.getElementsByTagName('input');

var xiaojiLen = document.getElementsByName("xiaoji");

var xiaojiArray=new Array();

var xiaojiInt = 0;

var allCheckFlag = true;

for (var key in el) {

if (el[key].type == 'checkbox') { 

if(el[key].id !="checkAllId") {

xiaojiArray[xiaojiInt] = el[key].checked;

xiaojiInt++;

if (el[key].checked == false) {

allCheckFlag = false;

}

}

}

}

document.getElementById("checkAllId").checked = allCheckFlag;

var sumXiaoji = 0;

var sumCount = 0;

for(var xiaoji in xiaojiLen) {

if (xiaojiLen[xiaoji].tagName == 'SPAN') {

if(xiaojiArray[xiaoji] == true) {

sumXiaoji = sumXiaoji + parseFloat(xiaojiLen[xiaoji].innerText);

sumCount = sumCount + 1;

}

}

}

document.getElementById("sumCount").innerText = sumCount;

document.getElementById("sumMoney").innerText = sumXiaoji;

}

          如果在前台需要给后台传送一个list,且这个是隐藏的,我们可以通过一个动态的name来实现:

<ul>

<li th:each="cartForm,status:${alipayForm.cartFormList}">

<input type="hidden" th:name="${#strings.concat('cartFormList[').concat(status.index).concat('].cartId')}" th:value="${cartForm.cartId}"/>

</li>

</ul>

            这里实现的是一个循环无序表的动态拼接的name,这个传到后台的时候还是用过之前定义的cartFormList来传递的结果。,这里的动态name的使用主要就是为了后台能接收到相应的值,在显示的页面上是没有影响的。


转载于:https://my.oschina.net/u/2411765/blog/490392

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值