`
streammoon
  • 浏览: 24706 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

dwr提交同名input

阅读更多
首先说明:以我个人的测试结果来看, 同名的textbox不可能都将“键--值”对提交到后台去。如果是多个同名textbox(如下的name="text4"),只有第一个的“键-值”对会提交到后台去,后面的同名值不行。


form 表单如下:
<form name="form1"  method="post">
           <br>
           test1:<input   name="test1" /><br>
           test2:<input   name="test2" /><br>
           test3:<input   name="test3" /><br>
           <br>
           test4:<input  id="t1" name="test4" /><br>
           test4:<input  id="t2" name="test4" /><br/>
           test5:<input  id="t51" /><br>
           test5:<input  id="t52"  /><br/>

           <input type="submit" value="submit" onclick="submitAllFormUseDwr();"><br/>
       </form>

dwr操作script 如下:
<script type="text/javascript" src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/util.js"></script>
<script type="text/javascript" src="dwr/interface/dwrComment.js"></script>

。。。。。。。。
function submitAllFormUseDwr(){
 
   var formMap = DWRUtil.getValues('form1');
   dwrComment.dwrMethod3(formMap,myDwrRetRresult);
}
function myDwrRetRresult(data)
  {
     alert(data);
  }

。。。。。。。。
对于名称为test4的textbox,提交到后台时,只能获取到一对值(即id="t1"的key-value)。对于id为t51 和 t52 的textbox 我原本也是想取同样的名称的。。。。
在查看dwr源码时(util.js)发现在dwr.util.getFormValues(。。)方法中有下面一段代码:
。。。。
if (ele[i].name) {
        name = ele[i].name;
        value = dwr.util.getValue(name);
      }
      else {
        if (ele[i].id) name = ele[i].id;
        else name = "element" + i;
        value = dwr.util.getValue(ele[i]);
      }

。。。。
没办法,只能去掉textbox中的name属性,只留一个id。这样到后台我就可以根据id来获取特使他的数据了。同样实现了类似多个同名元素提交的效果。
---------------------------------
在我的测试中,我的后台有两个javabean。
ChildBean1 bean1 = new ChildBean1();
ChildBean2 bean2 = new ChildBean2();

package com.my.dwr.po;

public class ChildBean1 {

private String test1="";
private String test2="";
private String test3="";
// getter & setter
}

package com.my.dwr.po;
/均为数组。。。
public class ChildBean2 {

private String[] test4;
private String[] test5;
private String[] test6;
// getter & setter
}


ChildBean2 就时要实现多个同名表单提交的。

对于ChildBean1的页面表单元素,采用name="",而ChildBean2 得页面表单元素不能有name属性。

后台action:
import  ....
import org.apache.commons.beanutils.BeanUtils;
public class DwrAction {
public BeanClass dwrMethod3(Map formMap){
this.convert(formMap); //处理同名input(ChildBean2 )ChildBean2 中属性均为数组
BeanClass formBean = new BeanClass();
ChildBean1 bean1 = new ChildBean1();

System.out.println(formMap);
try {
BeanUtils.populate(bean1, formMap); //处理非同名属性的input。ChildBean1 中属性为普通属性。
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return formBean;
}

public void convert(Map m){

Set s = m.entrySet();

Iterator it = s.iterator();
ChildBean2 bbb = new ChildBean2();

List test1 = new ArrayList();
List test2 = new ArrayList();
while(it.hasNext()){
Map.Entry<String, String> mm = (Map.Entry<String, String>)it.next();
String key=mm.getKey();
String ks[]=key.split("_"); //我提交的textbox的ID格式为“XXX_数字"的方式
System.out.println(mm.getKey()+"-------"+mm.getValue());

if("test4".equals(ks[0])){
test1.add(mm.getValue());
}
if("test5".equals(ks[0])){
test2.add(mm.getValue());
}

}
System.out.println(test1+"===="+test2);
}


}

dwr。xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr20.dtd">
<dwr>
<allow>
         <create creator="new" javascript="dwrComment">
            <param name="class" value="com.my.dwr.app.DwrAction"></param>
        </create>
       
        <convert match="com.my.dwr.po.BeanClass" converter="bean" javascript="BeanClass"></convert>
        <convert match="com.my.dwr.po.ChildBean1" converter="bean" javascript="ChildBean1"></convert>
        <convert match="com.my.dwr.po.ChildBean2" converter="bean" javascript="ChildBean2"></convert>
       
        <convert match="java.lang.Objec" converter="bean"></convert>
</allow>
<signatures>
   <![CDATA[
      import java.util.Map;
      import com.my.dwr.app.DwrAction;
      import com.my.dwr.po.BeanClass;
      import com.my.dwr.po.ChildBean1;
      import java.lang.Object;
      import java.lang.String;
      DwrAction.dwrMethod3(Map<String,String> formMap);
   ]]>
</signatures>

</dwr>
==================================
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics