直接上图看需求吧!
看完图,该当很清晰了,主种别采取下拉菜单,副种别采取的是复选框,通过在对应店铺内定制主副种别,可以在商品发布时,选择商品属于的种别。
正文首先我们来看一下数据库是怎么设置的吧,字段shop_id,category_name,flag分别表示种别号,店铺Id,flag=1是主种别,0是副种别。对应的输入了几组数组来合营我们的实验。
接下来我们来看看主类别的图背后的jsp页面是怎么设计的:
整张图,我们可以分两个部分,来看:
(1)点击进来往后,须要先查询数据库,把对应店铺的商品主种别找出来,然后把数据扔给Category,然后由它依次显示出来。
(2)我们可以在图中横线处填写我们须要的主种别号称,然后点击确认提交,重新刷新页面,显示提交完往后的数据,实在,这里又有两个操作,一个是操作时插入数据,另一个是查询,然后才能显示更新往后的页面。
我们先来看看第一个步骤,查询商品种别,我们直接在上图点击商品种别编辑:
可以看到,我们把shop_id参数一并提交给servlet/CateListServlet进行处理了,那么连续我们看到servlet详细做了什么?
上图里,我们详细做的便是先定义一个list,然后查询种别,通过shop_id和flag两个参数,先查询的是主种别,因此flag=1,然后我们request.getSession().setAttribute(\"大众Category\"大众, list_1); 把数据赋给Category,然后再由jsp页面的 <c:forEach items=\公众${Category }\"大众 var=\"大众c\"大众 varStatus=\"大众status\"大众>来分别显示数据,个中引入<c:forEach></c:forEach>要把稳一定要引入标签<%@taglib prefix=\"大众c\"大众 uri=\"大众http://java.sun.com/jsp/jstl/core\"大众%>,还要引入两个架包,详细看这个博客地址http://blog.csdn.net/u011958281/article/details/74216015,里面有详细的导包过程,不导入,会提醒,但是不报错,可是你的结果便是出不来,很苦恼。这一点一定要把稳!
!
接下来我们看第二个步骤,怎么动态添加种别:
添加:<input type=\"大众text\"大众 name=\公众cate_1\"大众 class=\"大众bg\"大众 />
<input type=\公众submit\"大众 value=\"大众确定\"大众 >
<form method=\"大众post\公众
action=\"大众${pageContext.request.contextPath}/servlet/AddCategoryServlet?flag=1\"大众>
可以看到,点击提交submit往后,会把实行${pageContext.request.contextPath}/servlet/AddCategoryServlet?flag=1,并且把flag=1参数传给后台,见告它是做主类添加。
这里有一个小细节, <input type=\"大众submit\"大众 value=\公众确定\"大众 > type=“submit”,它会默认实行form 里面的action里面的方法,并且把form内的数据全部提交给后台,后台就可以接管到了,这里提交的是<input type=\"大众text\"大众 name=\公众cate_1\"大众 class=\"大众bg\"大众 />,参数名是name=\"大众cate_1\公众,还有一个是通过地址传过去的flag=1,
后台吸收:
String category_name = request.getParameter(\"大众cate_1\"大众);
int flag =Integer.parseInt(request.getParameter(\"大众flag\"大众)) ;
这样就可以吸收到前台的数据参数,由于都是默认String类型,以是须要转一下Int类型。
但是有时候我们须要点击往后不是实行submit提交,而是实行其余的任务,那么我们type=“button”,而改成这个往后,再次点击,创造后台无论如何都得不到前台的category_name参数,flag可以,由于通过地址传过去的,与form无关,button是无法提交form内的数据的,因此,有时候,大家一定要把稳这两个的用法。
大家可以看到,如果我要删除一条记录怎么办,也是在form内的,如果我们写type=“button”,那么对不起,无论如何,也实行不了删除的功能,只会默认实行form内的action方法,那么我们要怎么做呢,改成button,这样才能实行我们的删除servlet,在这里我没有这么做,我是通过<a></a>超链接来做的:
<td align=\公众center\"大众 style=\"大众HEIGHT: 22px\"大众 width=\公众7%\"大众><a
href=\"大众${pageContext.request.contextPath}/servlet/DeleteCatesServlet?shop_id=${shop.id }&name=${c.category_name}\"大众>
<img
src=\公众${pageContext.request.contextPath}/admin/images/i_edit.gif\公众
border=\"大众0\"大众 style=\公众CURSOR: hand\"大众>
</a></td>
我通过传店铺id跟种别号来删除种别:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding(\公众UTF-8\"大众);
ShopService ss = new ShopServiceImpl();
String name = request.getParameter(\公众name\公众);
int shop_id = Integer.parseInt(request.getParameter(\"大众shop_id\"大众));
int i = ss.deleteCate(shop_id, name);
if(i==1){
System.out.println(\"大众删除了\"大众+name+\"大众商品种别信息!
\"大众);
request.getRequestDispatcher(\"大众/servlet/CateListServlet\公众).forward(request, response);
}
}
详细的删除操作大家该当都熟习,紧张便是在一个form内的不同<input type=\"大众\"大众>到底是submit还是button,这两个的差异,
末了我跳转到request.getRequestDispatcher(\"大众/servlet/CateListServlet\"大众).forward(request, response);这个servlet实行查询种别,末了显示出来了。
副种别跟主种别一样的思想,大家参考主种别就可以了。
末了,便是我们如何动态的显示下拉菜单跟复选框!
再看一遍效果图:
下面我就直接上代码了,由于还是一个forEach,步骤跟之前的一样:
<tr>
<td align=\公众center\"大众 bgColor=\"大众#f5fafe\"大众 class=\"大众ta_01\公众>商品主种别:</td>
<td bgColor=\公众#ffffff\"大众><select name = \"大众CategorySelect\公众 >
<option value=\公众\"大众 selected=\公众selected\"大众>--------------选择--------------</option>
<c:forEach items = \"大众${Category_1 }\"大众 var = \"大众c\"大众>
<option value=\"大众${c.category_name }\"大众>${c.category_name }</option>
</c:forEach>
</select>
<td align=\公众center\"大众 bgColor=\"大众#f5fafe\"大众 class=\"大众ta_01\公众>商品副种别:</td>
<td bgColor=\"大众#ffffff\"大众>
<c:forEach items = \公众${Category_0}\"大众 var = \"大众ca\"大众 varStatus=\公众vs\"大众>
<input type = \公众checkbox\"大众 value =\"大众${ca.category_name }\公众 name=\"大众name\"大众>${ca.category_name }
<c:if test=\"大众${(vs.index+1)%8 == 0}\"大众>
<br />
</c:if>
</c:forEach>
</tr>
这便是关键的两个显示的代码,大家可以直接复制, <c:forEach items = \"大众${Category_1 }\"大众 var = \"大众c\公众>, <c:forEach items = \"大众${Category_0}\公众 var = \公众ca\公众 varStatus=\公众vs\"大众>这两处的${Category_1 }${Category_0},都是通过后台查询,然后分别把查询的List数据赋值一下就可以了,到此我们局可以看到,这个过程结果就涌现了,做了整整两天,前期也纠结了好久怎么实现,对了还有一个小问题也是里面出来的,但是跟题无关,但是一旦发生很难找到,也是关于这个赋值的问题,不报错,但是后台便是得不到值。
看图name=\"大众capacity \"大众有没有把稳“ ”里面是空了一格,因此在后台你用request.getParameter(\"大众capacity\"大众);会创造无论如何你得不到这个参数的值,你也不会对这个小小的空格产生迷惑吧,便是这样的一个空格,导致你可能大白天都出不来结果!
我也碰着了,由于之前也碰着过,以是试了几次就看出来了。大家一定要自己把稳!