直接上图看需求吧!

看完图,该当很清晰了,主种别采取下拉菜单,副种别采取的是复选框,通过在对应店铺内定制主副种别,可以在商品发布时,选择商品属于的种别。

正文

首先我们来看一下数据库是怎么设置的吧,字段shop_id,category_name,flag分别表示种别号,店铺Id,flag=1是主种别,0是副种别。
对应的输入了几组数组来合营我们的实验。

jsp中submit和butt若何动态的添加下拉菜单跟复选框及submit与button的应用差异 Java

接下来我们来看看主类别的图背后的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\公众);会创造无论如何你得不到这个参数的值,你也不会对这个小小的空格产生迷惑吧,便是这样的一个空格,导致你可能大白天都出不来结果!
我也碰着了,由于之前也碰着过,以是试了几次就看出来了。
大家一定要自己把稳!