最初的想法: 通过checkbox 将我所做的菜单列表(FoodList)显示出来,然后如果菜单中的一些菜品(Food)被选中的话,就将他们的id值传递过来,
然后调用service的findById()方法查找对应的Food对象,再将每个对象添加到List集合中,将List放到session域中传递到支付界面.后来发现id传过来的都是0
复选框:
<input type="checkbox" name="foods" value="${fl.id }"/>
接收复选框的servlet:
String[] orderfoods = request.getParameterValues("foods");
我猜想可能checkbox没有选中事件,值传不过来?然后找了下面的选中事件:
<form action="${pageContext.request.contextPath}/FoodServlet?method=orderfood" method="post" >
<input type="checkbox" name="foods" value="${fl.id }"/>内容1
<input type="checkbox" name="foods" value="${fl.id }"/>内容2
......
<input type="submit" value="下单" class="check" οnsubmit="return checkData();"/>
</form>
</script>
function checkData()
{
var foods=document.getElementsByName("foods");
var flag=false;
for(var i=0;i<foods.length;i++)
{
if(foods[i].checked==true)
{
flag=true;
break;
}
}
return flag;
}
</script>
写了上面一堆,结果还是接收不到值,就排除了上一种可能
我就再往上找源码,发现是dao 中调用sql语句出现了问题,在查询的时候没有查 id 这个字段,加上之后,问题迎刃而解.
附一条利用标签,EL表达式在jsp计算和的方法
先引入标签库:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:forEach var="ofl" items="${orderfoodlist}" varStatus="vs">
<tr>
<th>${vs.count}</th>
<td>${ofl.foodName}</td>
<td>${ofl.price}</td>
<c:set value="${sum +ofl.price}" var="sum" /> (这就是计算和的核心表达式)
</tr>
</c:forEach>
<tr>
<th>总金额</th>
<td colspan="2">${sum}</td> (通过该语句获取sum的值)
</tr>