各位高手:小弟在做一个struts的项目,需要在一个页面动态生成输入框,生成输入框代码如下:
function AddNewRow()
{
if (i<=10){
var rowcount=Mytable.rows.length ;
var newrow=Mytable.insertRow(-1);
newrow.insertCell(0).innerHTML= "编号"+ i +"";
newrow.insertCell(1).innerHTML="<INPUT type=text    name='addsubno'style=\"WIDTH: 200px; HEIGHT: 22px\" size=8 value=\""+ "\">";
i++;
} else {
alert("注意,一次最多生成10个输入框");
}
}
动态输入框生成的内容保存到数组addsubno中传递到后台action,在action对addsubno中的输入内容进行检查时如果数组中的输入值不合要求就返回的页面进行修改,现在的问题是返回到页面时页面重新刷新了,以前生成的输入框都没有保存,即使再重新生成后生成的输入框也不能得到以前输入的值了,请教各位如果想保存以前的输入框并把以前输入的值保存到相应的框中该怎么实现。问题搞定结帖给分!

解决方案 »

  1.   

    三个办法:
    1、直接写javascript校验
    2、不要刷新原页面,在页面上嵌入一个iframe,校验时将form的target设到iframe,在iframe中执行校验,校验后用iframe的javascript处理主页面的提交
    3、用javascript的histroy.back()回退
      

  2.   

    action:
    request.setAttribute("_JavaScript", "window.location.href='/nanbo/errorInfo.do';");         
            return mapping.findForward("info");
    struts:      <global-forwards>
        <forward name="info" path="**.jsp" />
          </global-forwards>
    **.jsp:<table>
     <tr>
       <td style="font-size:14px" height="100" align="center">
         <logic:notEmpty name="_JavaScript" scope="request">
           <script language="javascript" type="text/javascript">
           <bean:write name="_JavaScript" scope="request" filter="false" />
           </script>
         </logic:notEmpty>
    </td>
    </tr>
    </table>
      

  3.   

    action:
    request.setAttribute("_JavaScript", "window.history.back();");
      

  4.   

    楼上的那样做的话就输出不了错误信息了吧?记得back()是简单的回退。
    actionform不是支持map么? 你可以在输出的时候把需要的key输成数字,然后在form以
    getxxx(String key){
    return xxx[Integer.valueof(key).intValue()];
    }
    我只是这样想的,没试过
      

  5.   

    我是说他struts里面的actionerror
      

  6.   

    我想用第三种方法("_JavaScript", "window.history.back();");
    但是"_JavaScript"是不是我动态生成输入框的那段脚本,如果执行了这段脚本它有如何判断上次生成了几个呢,能不能把上次输入的值set到相应的输入框呢,还请大家指教。
      

  7.   

    我也试了这个方法:
    action:
    request.setAttribute("_JavaScript", "window.location.href='/nanbo/errorInfo.do';");         
            return mapping.findForward("info");
    struts:      <global-forwards>
        <forward name="info" path="**.jsp" />
          </global-forwards>
    **.jsp:<table>
     <tr>
       <td style="font-size:14px" height="100" align="center">
         <logic:notEmpty name="_JavaScript" scope="request">
           <script language="javascript" type="text/javascript">
           <bean:write name="_JavaScript" scope="request" filter="false" />
           </script>
         </logic:notEmpty>
    </td>
    </tr>
    </table>
    也不行,不知道是我没有理解上面的意思还是方法不行,在action中出错了返回到源页面时页面不会有动态生成的输入框,我现在想做的就是出错时返回到源页面时页面生成与提交页面时生成的输入框数目相同并且提交时输入的值显示在源页面上(即一直是同一个页面),即我在1.jsp动态生成n个输入框,输入n个数目,校验的时候发现输入的有错误,返回1.jsp 这是刷新了页面但是要求重新生成n个输入框,并把刚才输入的数字显示到框中。 还请各位帮忙啊