本人是第一次用Struts设计,现在遇到一个问题,望各位帮忙相助
(环境是Jbuilder9.0 + Jboss3.2)1)在JSP页面,显示我查询的记录,每行记录前面动态生成一个Checkbox,象新浪的邮箱那样。( 动态的checkbox是这样生成的 <input type="checkbox" name=mid value=<%=i%>> ,i 可以代表每条记录在数据库的ID号,删除记录以此ID号为准)2)在Action里面要根据选中的Checkbox,删除此行记录。action是这样处理的:
 String[] checkbox=httpServletRequest.getParameterValues("min")
此语句放在JSP页面没问题,能得到上个页面选中的Checkbox。
但在Action里面总是空值。原因1)
是不是在1)步中我的checkbox没用Struts标志,这个页面包括Form我都没用Struts标志,而Action就不识别了?我想把checkbox的标志改为Struts的,可动态生成的valus没法设置。原因2)
我想用一种比较笨的办法,我这个显示记录的页面是分页的(最多20条)。我想在这个页面根据选中的checkbox来构造一个数组,把它传到Action中去处理。
function  getAllDelteRows(count){
     var flag=true;
     <% ArrayList cardlist = new ArrayList() ;%>      if(confirm("真的要删除所有要选中的行吗?")){
      for (var i = 0; i < count; i++)
       {
         if( document.del.mid[i].checked){
              var cardtypeid;
              cardtypeid = document.del.mid[i].value;
              ???????????????????????????????
              <%System.out.println(cardlist.get(0));%>         }
       }
         session.setAttribute("cardlist",cardlist);
        System.out.println(cardlist.get(0));         flag=true;
      }
     else{
flag=false;
      }
      return  flag;  }可Javascript的变量值如何传到Java的变量中(??????处如何处理),在这个javascript函数中,cardlist这个java变量不识别,总是报错。不知道问题说清了没有?大哥大姐帮帮忙?有空请你们吃饭了??

解决方案 »

  1.   

    你的两个名字不一样,当然是空值了<input type="checkbox" name=mid value=<%=i%>>String[] checkbox=httpServletRequest.getParameterValues("min")
      

  2.   

    谢谢,不好意思,这个地方是我写错了,我的本意是改成mid也不行,不知道你们怎么用的??
      

  3.   

    你完全可以用struts的<html:checkbox>来实现你的功能。
    1。首先在actionFrom中定义一个ArrayList叫props存放你的纪录。同时定义另外一个同长度数组叫checkboxInput对应于jsp上的checkbox。
    2。jsp上用<logic:iterate>标签动态生成checkbox及相对应的纪录显示。
    <logic:iterate id="BOA0050ID" name="YourFromName" property="props" indexId="index">
               <html:checkbox property='<%="checkboxInput[" + (java.lang.Integer) pageContext.findAttribute("index")+ "]"%>'  />
    </logic:iterate>
    3。递交页面时你就判断checkboxInput中哪个值为on就可以直到那个被选中了。
      

  4.   

    很感激页面代码如下:<%@ page contentType="text/html; charset=GBK" %>
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
    <%@ taglib uri="/WEB-INF/struts-nested.tld" prefix="nested" %>
    <%@ taglib uri="/WEB-INF/struts-template.tld" prefix="template" %>
    <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %><%@ page language="java"
             errorPage="myerror.jsp"
             import="java.sql.*,java.util.*,
             channelmanage.share.*, sun.jdbc.rowset.CachedRowSet"
    %>
    <jsp:useBean id="myCardType" scope="session" class="channelmanage.share.CardType" />
    <jsp:setProperty name="myCardType" property="*" /><SCRIPT  language="JavaScript">
       function  WirteCheck(){
            window.document.writeln(' <td width = 6%>')
    window.document.writeln('<input type="checkbox" name="mid" value="checkbox" >')
            window.document.writeln('</td>')          }
       function   selectall(length){    document.del.all.checked = document.del.all.checked|0;    if (length == 0 ){
              return;
        }
        if (length ==1 )
        {
           document.del.mid.checked=document.del.all.checked ;
        }    if (length>1)
        {
          for (var i = 0; i < length; i++)
           {
            document.del.mid[i].checked=document.del.all.checked;
           }
        }
    }
       function  getAllDelteRows(count){
         var flag=true;
          if(confirm("真的要删除所有要选中的行吗?")){
          for (var i = 0; i < count; i++)
           {
             if( document.del.mid[i].checked){         }
           }
             flag=true;
          }
         else{
    flag=false;
          }
          return  flag;
      }
    </SCRIPT>
    <html>
    <head>
    <title>卡类别维护</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    </head>
    <body bgcolor="#FFFFFF" text="#000000" background="Images/background.jpg">
    <p align="center"><font size="5" color="#0000CC">卡类别维护</font></p>
    <form name="del" method="post" action="">
      <table width="80%" border="1" cellspacing="3" cellpadding="2">
        <tr bgcolor="#00FF00">
          <td width="6%" bgcolor="#FFFFCC">
            <div align="center">操作</div>
          </td>
          <td width="13%" bgcolor="#FFFFCC">
            <div align="center">卡类别标识</div>
          </td>
          <td width="13%" bgcolor="#FFFFCC">
            <div align="center">卡类别编号</div>
          </td>
          <td width="20%" bgcolor="#FFFFCC">
            <div align="center">卡类别名称</div>
          </td>
          <td width="10%" bgcolor="#FFFFCC">
            <div align="center">卡面值</div>
          </td>
          <td width="16%" bgcolor="#FFFFCC">
            <div align="center">最低折扣值</div>
          </td>
          <td width="20%" bgcolor="#FFFFCC">
            <div align="center">卡类别描述</div>
          </td>
          <td width="5%" bgcolor="#FFFFCC">
            <div align="center">操作</div>
          </td>    </tr>
     <% int pageNo = 0; %>
     <% int i =0 ; %>
     <% ArrayList cardlist = new ArrayList() ;%>
       <%
          String tmp=request.getParameter("pageNumber");
          int pageNumber = 0;
          if (tmp==null || tmp.equals("")){
    pageNo = 1;
          }else{
    try{
    pageNo = Integer.parseInt(tmp);
    }catch(java.lang.NullPointerException  npe){
      pageNo =1;
    }catch(java.lang.NumberFormatException  nfe){
    pageNo =1;
    }
          }
         %>
       <% Page pagec = null;%>
       <%
       int pageSize = 10;
       CachedRowSet crset = null;   try{
    crset= myCardType.getAllRows();
    pagec = new Page(crset,pageNo,pageSize);
       }catch(Exception  e){
    System.out.println("happen error!!");
       }
       %>
       <%
       if (pagec.getData().getRow() >0 ){
          for ( i = 0; i<pagec.getPageSize();i++){
       %>
        <tr>
          <SCRIPT  language="JavaScript">
            WirteCheck()
          </SCRIPT>
          <td width = 15% align="center"><%= pagec.getData().getInt("card_type_id")%></td>
          <td width = 20% align="center" ><%= pagec.getData().getString("card_type_code")%></td>
          <td width = 20% align="center"><%= pagec.getData().getString("card_name")%></td>
          <td width = 10% align="center"><%= pagec.getData().getInt("card_par_value")%></td>
          <td width = 15 align="center"%><%= pagec.getData().getInt("min_disct_value")%></td>
          <td width = 20 align="center"%><%= pagec.getData().getString("card_desc")%></td>
          <td width = 10%><A href="getCardAction.do?cardtypeid=<%=pagec.getData().getInt("card_type_id")%>" >[修改]</A></td>
        </tr>
      <%
         if (!pagec.getData().next()) break;
          }
       }
       crset.close();
      %>
      </table>
     <%
        PageView view = new PageView(request,out,pagec);
        view.setVisible(true,0,2);
       %>
    <TABLE width="80%" BORDER=0 CELLSPACING=2 CELLPADDING=0>
    <TD><input type="checkbox" name="all" value=1 onclick=selectall(<%= i%>)>全选 |   <A HREF="CardDeleteAction.do?cardlist=<%=cardlist%>" onClick=" return getAllDelteRows(<%= i%>,<%= cardlist%> )">删除</A> |   <A HREF="CardAdd.jsp">[增加]</A> 
    </TABLE>
    </form>
    </body>
    </html>
      

  5.   

    我这里在 for循环做了记录的生成,
     lj0425(冰芝麻) 的方法我还没有试,
    yujinping(JavaFan) 有好的建议吗?
      

  6.   

    I didnt real your whole code, but checkbox works fine with struts.  either html or struts tag is fine, I really dont see big benefit on struts html tags.i noticed:
    1. javascript function WirteCheck() doesnt take in parameter, so you will have select boxes with same name ("mid") and value ("checkbox"), not '<input type="checkbox" name=mid value=<%=i%>> ' as you wanted. 2. if you dont check any checkbox, your action class will get no value for 'mid'.
    3. why do you use javascript to write page content?  you might try static html first.
      

  7.   

    我也不想用struts html tags,我觉得很麻烦。
    1)我需要用Actionform传递参数,好象必须用struts html tags吧!!不用的话,JSP的输入元素应该不能绑定到ActionForm
    2)如果不用这些标志,Struts结构中的Action认吗?
    String[] checkbox=httpServletRequest.getParameterValues("min")
    目前程序调式好象是不识别的。因为不用Action而用另外一个JSP是可以得到的。3)目前最大的问题是我想把值放到checkbox的value中,
    <input type="checkbox" name=mid value=<%=i%>>
    通过2)步中的action获取checkbox的值,我可以方便地用这个值操作我的数据库。
    但把上面这句改成struts html tags,value属性必须用""括起来,我用双引号,编译时程序报
    checkbox的setvalue(int)错误,我记得不很清楚,但大概是这个意思。
    我不用双引号,编译是告诉我必须用quote,我真的没办法。
      

  8.   

    BeanForm 增加一个checkedList后JSP页中增加
    <html:hidden property="checkList"/>更改javascript函数function  getAllDelteRows(count){
         var flag=true;
         var  checked_list="";
          if(confirm("真的要删除所有要选中的行吗?")){
          for (var i = 0; i < count; i++)
           {
             if( document.del.mid[i].checked){
                   checked_list=checked_list+document.del.mid[i].value+";";
             }
           }
             flag=true;
          }
         else{
    flag=false;
          }
          if(flag==true)
             document.checkList.value=checked_list;
          return  flag;
      }
    ActionServlet中进行
    取数据
    String list =form.getCheckedList();
    String[] checked = list.split(";");
    就得到了所有选中的checkbox 的值了