在今天的工程学习中,我们实现了用户收货地址的查询与添加,较之前不同的是,此时多加了一个默认地址的设置,一个checkbox来确定选择该项为默认地址,默认地址的设置是通过我们之前的用户表的地址栏来设置的。因为我们要多个地址,所以,为了管理地址方便,我们建了一个用于收货人信息管理的表,其中主键为地址Id,我们用之前用户地址栏作为默认地址的Id,然后通过查询用户表找出其默认地址。当然,其他地址的查询是通过地址表的查询,查询条件是用户Id,这样可以实现用户所有收货人地址的查询。
在收货人地址管理过程中,我们一直使用的是一个页面address.html。所以,在点击按钮后进入到对应的controller中后要进行判断addressId是否有值,如果没有则进行一个添加操作,反之则进行一个更新操作即修改功能,在修改时,我们需要将对应的收货人信息传值回页面上进行对应的修改操作。注意,在address.html页面,我们加了两个隐藏的input框,用于提供用户ID与收货人的地址ID,这样我们在每次页面跳转之后,都可以实现查询用户的所有收货人地址和判断是否进行添加操作。在这个过程中,存在问题就是下拉列表的值传不到后台。在jsp中可以这样传值,方法如下:
<form:select path="expressId">
<form:options id="expressId" items="${expressList}" itemLabel="label" itemValue="value" />
</form:select>
这个中的数据源为expressList,并没有使用循环标签,而是使用form:option标签,定义了items为数据源,每一项为item,然后对应的设置了每一项的itemLabel与itemValue的属性,select的名字与options中的id值相同。在下拉列表的使用中,当你提交时浏览器只将value上传服务器,上传到服务器后,你在服务器生没有办法通过获取请求参数的方式来获得text,所以只能在查询表或者提前将对应的value与text存储到页面上再传回后台判断。
<select th:field="*{type}">
<option th:each="type : ${allTypes}"
th:value="${type}"
th:text="#{${'seedstarter.type.' + type}}">Wireframe</option>
</select>
上边的代码是html中的下拉列表的写法,这个还有待验证。
在首页的商品排序中,运用的方法是链接与th:if标签的灵活使用,商品排序只显示升序与降序一种情况,不能同时显示,通过th:if标签对页面排序按钮的显示情况实现了动态改变,orderTypeId的是用来区分排序以及按什么类型的排序,注意这里使用了th:if标签对选没选中该项都进行了匹配,所以,总会有三个按钮显示在页面上,即默认,人气,价格:
<a th:href="@{initGoods(commodityTypeId=${goodsForm.commodityTypeId})}" th:class="${orderTypeId}==1?'btn btn-default btn-danger':'btn btn-default'"> 默 认 </a>
<a th:href="@{initGoodsByPopularDesc(commodityTypeId=${goodsForm.commodityTypeId})}" th:class="${orderTypeId}==3?'btn btn-default btn-danger':'btn btn-default'" th:if="${orderTypeId}!=2"> 人 气<i></i> </a>
<a th:href="@{initGoodsByPopular(commodityTypeId=${goodsForm.commodityTypeId})}" th:class="${orderTypeId}==2?'btn btn-default btn-danger':'btn btn-default'" th:if="${orderTypeId}==2"> 人 气<i class="up"></i> </a>
<a th:href="@{initGoodsByPriceDesc(commodityTypeId=${goodsForm.commodityTypeId})}" th:class="${orderTypeId}==5?'btn btn-default btn-danger':'btn btn-default'" th:if="${orderTypeId}!=4"> 价 格<i></i> </a>
<a th:href="@{initGoodsByPrice(commodityTypeId=${goodsForm.commodityTypeId})}" th:class="${orderTypeId}==4?'btn btn-default btn-danger':'btn btn-default'" th:if="${orderTypeId}==4"> 价 格<i class="up"></i> </a>