小弟近日在做一个附件上传的程序,碰到一个小问题无法解决,程序思路是每点击一次添加附件图标,执行一次addfj()脚本,刷新一次页面,出现一个type类型为file的输入框,
 现在遇到的问题是:第二次点击添加附件图标后,前一次文本框里选定的值会被清空,在此处<input name="fj<%=i%>" type="file"  size="35">加上value=<%=fname[i]%>无济于事,特请教各位,刷新页面后如何才能保存文本框的值?附代码如下 <%
  int total=0;
  String fname[]=null;
  if(request.getParameter("total")!=null&&request.getParameter("total").trim().length()!=0){
 total = Integer.parseInt(request.getParameter("total"));
   }
  for(int j=0;request.getParameter("fj"+j)!=null;j++)
    {
fname[j] = request.getParameter("fj"+j);
}
 %>
 <script language="javascript">
 function addfj(){
     var totalnum = <%=total%>;
 document.myform.action="attachment.jsp?total=<%= total + 1%>";
 document.myform.submit();
      }
 
</script>
<body>
<form name="myform" method="post">
<table  class="lowcolor" width="100%"  border="0" cellpadding="3" cellspacing="0">
<tr><td><a href="javascript:addfj();"><img  src="../images/icoAddFl.gif" border=0 >添加附件</a></td><td>&nbsp;</td></tr>
  <%
   for(int i=0;i<total;i++){
   %> 
  <tr><td bgcolor="#FFFFFF"><input name="fj<%=i%>" type="file"  size="35"></td>
    <td>&nbsp;</td>
  </tr>
  <%
   }
  %>
</table>
</form>
</body>

解决方案 »

  1.   

    把那个值保存起来 ,每次刷新调用request.getAttribute()取出来放回去
      

  2.   

    to:KingOfWorl,能不能说的再具体一些?
      

  3.   

    现在我想把添加附件修改成中华网邮箱添加附件那种模式,即每点击一次添加按钮后就刷新一次本页面,同时把先前选定的附件名保存在数组里,现在碰到的问题是每次添加后都只可能在数组中保存当前添加的附件名,而先前保存在数据中的附件名则被清空,这该怎么处理呢?
      附主要代码:
           <%
      int total=0;
      String fj="";
      String multi="";
        if(request.getParameter("total")!=null&&request.getParameter("total").trim().length()!=0){
     total = Integer.parseInt(request.getParameter("total"));
          }
      if(request.getParameter("multi")!=null){
        multi = request.getParameter("multi");
      }
       //
         //
        %>
     <script language="javascript">
        function addfj(){
         var totalnum = <%=total%>;
     if(totalnum<5)
        document.myform.action="attachment.jsp?total=<%= total + 1%>&multi="+myform.fj.value;
     document.myform.submit();
          }
          }
     </script>
     <body>
     <p>注意:至多只能上传5个附件</p>
     <hr>
    <form name="myform" method="post">
    <table  class="lowcolor" width="100%"  border="0" cellpadding="3" cellspacing="0">
    <tr><td>1、点“浏览 ...”按钮,选择你想要粘贴的附件:</td><td>&nbsp;</td></tr>
      <tr><td bgcolor="#FFFFFF"><input name="fj" type="file"   size="35"></td>
       <td>&nbsp;</td>
      </tr>
     <tr><td>2、选定一个附件后,点击“添加”按钮,将该文件添加到邮件上&nbsp;&nbsp;
       <a href="javascript:addfj();"><img  src="../images/add.gif" border=0></a></td><td>&nbsp;</td>
     </tr>
     <tr><td>3.如果需要粘贴一个以上的附件,请重复1、2步骤;</td><td>&nbsp;</td></tr>
      <tr><td>4.所有的附件粘贴完后,点击“完成”按钮返回,点击“取消"按钮取消本次操作</td><td>&nbsp;</td></tr>
      <tr><td align="center"><a href="javascript:finish();"><img  src="../images/finish.gif" border=0></a>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="javascript:window.close();"><img src="../images/cancel.gif" 
    border=0></a></td><td>&nbsp;</td>
      </tr>
      </table>
    </form>
    </body>
      

  4.   

    file  值默认是不让写的,也就是不让付值的,所以会为空,可以用一个什么控件。我记不得了。
      

  5.   

    <form name="myform" method="post" action="<%......%>">这样试试,大体该没问题,最好要生成得页面在服务端用jsp语言全部生成。js做少量操作。
      

  6.   

    我曾试着在上面代码的// //处加了一段代码:
     if(request.getParameter("multi")!=null){
    ArrayList   list = new ArrayList();
           list.add((String)request.getParameter("multi"));
      } 
      可是把list结果输出来时总是只有当前添加的那个附件,无法在list中保存先前添加的附件,不清楚代码错在哪儿?
      

  7.   

    因为你这个list每次都是new的把list的声明放在外部,并且每次请求之后将list置入session,用时取出,在进行add否则,你的list中永远只有最新添加的一条附件记录明白我的意思?
      

  8.   


       to Kenvinlinuu:感谢你的回答,你的意思我也明白,我一开始也是这样写的,
        ArrayList   list= new ArrayList();
      if(request.getParameter("multi")!=null){
            list.add((String)request.getParameter("multi"));
            session.setAttribute("list",list);
      } 
       把list的声明放在外部,并且每次请求之后将list置入session,然后在另一个页面用session.getAttribute("list"),把list结果输出来时总是只有当前添加的那个附件,你所说的"用时取出,在进行add"这段代码该怎样写,你能大概写一下吗?我这里先谢谢了.
      

  9.   

    现在的代码还是每次都new了一个ArrayList对象应该这么做ArrayList list = (ArrayList) session.getAttribute("list") ;
    if(null == list)
    list = new ArrayList() ;if(request.getParameter("multi")!=null){
    list.add((String)request.getParameter("multi"));
    session.setAttribute("list",list);
    } 现在你应该明白了
      

  10.   

    感谢kevinliuu的大力帮助,问题已解决,送分!!!