先是一个 changes.jsp 的关键代码,他的目的是实现复选框里的多值<%
String bookType[]={"dk","sk","gk","nk"};
int number=bookType.length;
%>
<body background="beijing.gif"><div align="center">
获取复选框的值
  <form name="form" method="post" action="changes_result.jsp" onSubmit="return checkEmpty(form)">
    <table width="276">
      <tr>
        <td width="266">选择渠道</td>
      </tr>
      <%
      for(int i=0;i<bookType.length;i++){
      %>
      <tr>
        <td><input type="checkbox" name="name<%=i%>" value="<%=bookType[i]%>">
        <%=bookType[i]%></td>
      </tr>
<%}%>    </table>
     <input type="hidden" name="number" value="<%=bookType.length%>">
    <input type="submit" name="Submit" value="提交">查询得到结果 change_result.jsp 的关键代码:
<%
request.setCharacterEncoding("gb2312");
int number=Integer.parseInt(request.getParameter("number"));
%>
<%
for(int i=0;i<number;i++){
  String name="name"+i;
  if(request.getParameter(name)!=null){
%>
      <tr>
        <td width="226"><div align="center<%=request.getParameter(name)%></div></td>
      </tr>
 <%}}%>可以看到直接使用<%=request.getParameter(name)%> 就可以得到复选框里的值
但是,如果直接使用下面的,就是无法获得name 的值啊      <% }} catch(Exception ex) {}%>
    <% try{
 String sql="select * from serv6 where cust_gp in ('"+request.getParameter("name")+"') ";
     ResultSet rs=connection.executeQuery(sql);
                 while(rs.next()){
     %>所以,现在问题是,上面这段代码,该如何改,使得其可以得到name的值得呢?
哪个大大知道的 ,40分送上!

解决方案 »

  1.   

    .
    .
    <tr>
      <td width="226">
       <div align="center">
        String sql="select * from serv6 where cust_gp in <%=request.getParameter(name)%>;
       </div>
      </td>
    </tr>
    .
    .
      

  2.   

    for循环里面的
    <td><input type="checkbox" name="name<%=i%>" value="<%=bookType[i]%>">
    改成
    <td><input type="checkbox" name="channel" value="<%=bookType[i]%>">
    对于多个复选框,可以用一个名字,这样你接受到的会是一个数组,存的是被钩上的checkbox 的value
    在接受页面String[] chanel = request.getParameterValues("channel");
    循环就ok了
      

  3.   

    那接受页面直接使用
    try{
     String sql="select * from serv6 where cust_gp in ('"+request.getParameter("channel")+"') ";
         ResultSet rs=connection.executeQuery(sql);
                     while(rs.next()){
         %>
    就OK了?可是我发现,运行之后,我得到的channel 的值,只是复选框中的头一个的值啊
      

  4.   

    request.getParameter("name")只能取得一个复选框的值
    如果要取多个值,就如dragonsdg3(什么什么java)说的一样了,
    那要用request.getParameterValues("name"),name为你的复选框的名字,并且你的所有复选框的名字都要是的一样的。
    request.getParameterValues("name")反回的是一个字符串数组,使用时要这样:
    String[] params = request.getParameterValues("name");但是在sql 语句 select ... in ()中,括号中的字符串却是要用 , 来隔开的,所以还要转换。
    比如:
    ------------------
      /**
       *将一个字符串数组以","分开
       */
         public static String splitID(String id[]){
      
             StringBuffer str = new StringBuffer();
      
             for(int i=0;i<id.length;i++){
             
                  if(i>0)
                  
                    str.append(",");
                    
                  str.append(id[i]);
          }
          
       return str.toString();
      
      }
    -------------------
    所以你在sql语句中直接就这样用就可以了:
    String sql="select * from serv6 where cust_gp in ("+splitID(params)+")";
    你自己试试吧,不知道讲得对不对
      

  5.   

    在SQL中直接用这个?
    String sql="select * from serv6 where cust_gp in ("+splitID(params)+")";
    那splitID() 这个方法不要事先声明么?
      

  6.   

    String sql="select * from serv6 where cust_gp in ('"+request.getParameter("name")+"') ";
    这句话有错,应该是:
    String sql="select * from serv6 where cust_gp in ('"+request.getParameter(name)+"') ";
    看出不同了吗?
    request中只有叫"name0""name1"的一堆参数,没有叫"name"的,name只是你在result页面定义的一个变量,怎么能加双引号呢?
      

  7.   

    splitID() 那个方法不是给你写出来了吗?
    你复制进去就可以了